[INFO] cloning repository https://github.com/fantasyzhjk/rosu-ppplus-csr-ffi
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/fantasyzhjk/rosu-ppplus-csr-ffi" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffantasyzhjk%2Frosu-ppplus-csr-ffi", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffantasyzhjk%2Frosu-ppplus-csr-ffi'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 1daa78050b8831260c522a1cafa2ccf50862a897
[INFO] fixing fantasyzhjk/rosu-ppplus-csr-ffi against try#622891a4e29178280638a6b63a8908bde2c0c854+cargoflags=-Zfix-edition=end=2015,2024 for pr-157817-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Ffantasyzhjk%2Frosu-ppplus-csr-ffi" "/workspace/builds/worker-0-tc2/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-0-tc2/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/fantasyzhjk/rosu-ppplus-csr-ffi
[INFO] finished tweaking git repo https://github.com/fantasyzhjk/rosu-ppplus-csr-ffi
[INFO] tweaked toml for git repo https://github.com/fantasyzhjk/rosu-ppplus-csr-ffi written to /workspace/builds/worker-0-tc2/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/fantasyzhjk/rosu-ppplus-csr-ffi on toolchain 622891a4e29178280638a6b63a8908bde2c0c854
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/fantasyzhjk/rosu-ppplus-csr-ffi already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Blocking waiting for file lock on package cache
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/source:/opt/rustwide/workdir:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-0-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "1610612736" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:3a6becf2bc8dde7f3fa57ede90e4f284e72d296796fc446bbb1e2c7cc0530151" "sleep" "infinity", kill_on_drop: false }`
[INFO] [stdout] 48324b8b5a48b0af078a5a2c858a384623d0a01fe8ac6345ed2c2a5c43a03cdf
[INFO] running `Command { std: "docker" "start" "48324b8b5a48b0af078a5a2c858a384623d0a01fe8ac6345ed2c2a5c43a03cdf", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-w" "/opt/rustwide/workdir" "--user" "0:0" "48324b8b5a48b0af078a5a2c858a384623d0a01fe8ac6345ed2c2a5c43a03cdf" "/opt/rustwide/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "48324b8b5a48b0af078a5a2c858a384623d0a01fe8ac6345ed2c2a5c43a03cdf", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=" "-e" "RUSTDOCFLAGS=" "-w" "/opt/rustwide/workdir" "--user" "0:0" "48324b8b5a48b0af078a5a2c858a384623d0a01fe8ac6345ed2c2a5c43a03cdf" "/opt/rustwide/cargo-home/bin/cargo" "+622891a4e29178280638a6b63a8908bde2c0c854" "fix" "--allow-no-vcs" "--allow-dirty" "--frozen" "--all" "--all-targets" "--message-format=json" "-Zfix-edition=end=2015,2024", kill_on_drop: false }`
[INFO] [stderr] crater-edition-check: migrating to next edition
[INFO] [stderr]    Migrating rosu_pp_ffi/Cargo.toml from 2021 edition to 2024
[INFO] [stderr]    Migrating rosu_pp_ffi_build/Cargo.toml from 2021 edition to 2024
[INFO] [stderr]    Compiling proc-macro2 v1.0.92
[INFO] [stderr]    Compiling unicode-ident v1.0.14
[INFO] [stderr]    Compiling libm v0.2.15
[INFO] [stderr]    Compiling num-traits v0.2.19
[INFO] [stderr]    Compiling serde v1.0.215
[INFO] [stderr]    Compiling syn v1.0.109
[INFO] [stderr]    Compiling matrixmultiply v0.3.10
[INFO] [stderr]    Compiling strsim v0.10.0
[INFO] [stderr]    Compiling libc v0.2.172
[INFO] [stderr]    Compiling bytemuck v1.23.0
[INFO] [stderr]    Compiling serde_json v1.0.133
[INFO] [stderr]    Compiling thiserror v2.0.12
[INFO] [stderr]    Compiling log v0.4.22
[INFO] [stderr]    Compiling rawpointer v0.2.1
[INFO] [stderr]    Compiling rosu-map v0.2.1
[INFO] [stderr]    Compiling itoa v1.0.14
[INFO] [stderr]    Compiling safe_arch v0.7.4
[INFO] [stderr]    Compiling heck v0.4.1
[INFO] [stderr]    Compiling ryu v1.0.18
[INFO] [stderr]    Compiling wide v0.7.32
[INFO] [stderr]     Checking getrandom v0.2.16
[INFO] [stderr]     Checking rand_core v0.6.4
[INFO] [stderr]    Compiling quote v1.0.37
[INFO] [stderr]     Checking rand_chacha v0.3.1
[INFO] [stderr]    Compiling syn v2.0.89
[INFO] [stderr]     Checking rand v0.8.5
[INFO] [stderr]     Checking num-integer v0.1.46
[INFO] [stderr]     Checking num-complex v0.4.6
[INFO] [stderr]     Checking approx v0.5.1
[INFO] [stderr]     Checking num-rational v0.4.2
[INFO] [stderr]    Compiling rand_distr v0.4.3
[INFO] [stderr]     Checking simba v0.9.0
[INFO] [stderr]    Compiling serde_derive v1.0.215
[INFO] [stderr]    Compiling thiserror-impl v2.0.12
[INFO] [stderr]    Compiling darling_core v0.13.4
[INFO] [stderr]    Compiling darling_macro v0.13.4
[INFO] [stderr]    Compiling darling v0.13.4
[INFO] [stderr]    Compiling interoptopus_proc v0.14.23
[INFO] [stderr]     Checking nalgebra v0.33.2
[INFO] [stderr]     Checking rosu-mods v0.3.0
[INFO] [stderr]     Checking interoptopus v0.14.27
[INFO] [stderr]    Compiling interoptopus_backend_c v0.14.25
[INFO] [stderr]    Compiling interoptopus_backend_csharp v0.14.25
[INFO] [stderr]    Compiling interoptopus_backend_cpython v0.14.25
[INFO] [stderr]     Checking statrs v0.18.0
[INFO] [stderr]     Checking rosu-pp v3.1.0 (https://github.com/fantasyzhjk/rosu-ppplus-csr?rev=8d1cb1b4bccc1f44181b8bd7a02214d5e6dffb7f#8d1cb1b4)
[INFO] [stderr]     Checking rosu_pp_ffi v0.2.0 (/opt/rustwide/workdir/rosu_pp_ffi)
[INFO] [stderr]    Migrating rosu_pp_ffi/src/lib.rs from 2021 edition to 2024
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_ctor]
[INFO] [stdout] 86 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 87 | |         Ok(Self::default())
[INFO] [stdout] 88 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout]    = note: `--force-warn unsafe-attr-outside-unsafe` implied by `--force-warn rust-2024-compatibility`
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 86 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 87 |         Ok(Self::default())
[INFO] [stdout] 88 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 | |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 92 | |         self.mode = Some(mode);
[INFO] [stdout] 93 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 90 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 92 |         self.mode = Some(mode);
[INFO] [stdout] 93 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr] error: errors present after applying fixes to crate `rosu_pp_ffi`
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 97 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 98 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 95 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 97 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 98 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]  --> rosu_pp_ffi/src/attributes.rs
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 102 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 103 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 100 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 102 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 103 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]  ::: rosu_pp_ffi/src/beatmap/mod.rs
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 | /     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 106 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 107 | |             str.as_str()?,
[INFO] [stdout] 108 | |         ));
[INFO] [stdout] 109 | |         Ok(())
[INFO] [stdout] 110 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 105 ~     unsafe(pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 106 |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] ...
[INFO] [stdout] 109 |         Ok(())
[INFO] [stdout] 110 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]  ::: rosu_pp_ffi/src/difficulty.rs
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 114 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 112 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 114 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]  ::: rosu_pp_ffi/src/gradual.rs
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 119 | |         self.ar = Some(ar);
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 119 |         self.ar = Some(ar);
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]  ::: rosu_pp_ffi/src/lib.rs
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 124 | |         self.cs = Some(cs);
[INFO] [stdout] 125 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 124 |         self.cs = Some(cs);
[INFO] [stdout] 125 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]  ::: rosu_pp_ffi/src/mods.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/owned_string.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/performance.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/state.rs
[INFO] [stderr]   = cause: error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/beatmap/mod.rs:23:6
[INFO] [stderr]               |
[INFO] [stderr]            23 | impl unsafe(Beatmap) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/difficulty.rs:37:6
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 129 | |         self.hp = Some(hp);
[INFO] [stdout] 130 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 127 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 129 |         self.hp = Some(hp);
[INFO] [stdout] 130 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]               |
[INFO] [stderr]            37 | impl unsafe(Difficulty) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/owned_string.rs:17:6
[INFO] [stderr]               |
[INFO] [stderr]            17 | impl unsafe(OwnedString) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/performance.rs:49:6
[INFO] [stderr]               |
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 134 | |         self.od = Some(od);
[INFO] [stdout] 135 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 132 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 134 |         self.od = Some(od);
[INFO] [stdout] 135 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]            49 | impl unsafe(Performance) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/mods.rs:20:6
[INFO] [stderr]               |
[INFO] [stderr]            20 | impl unsafe(Mods) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/gradual.rs:21:6
[INFO] [stderr]               |
[INFO] [stderr]            21 | impl unsafe(GradualDifficulty) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/attributes.rs:107:1
[INFO] [stderr]                |
[INFO] [stderr]            107 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 139 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 140 | |             return mods.clock_rate().unwrap_or(1.0)
[INFO] [stdout] ...   |
[INFO] [stdout] 147 | |         1.0
[INFO] [stdout] 148 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 137 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 147 |         1.0
[INFO] [stdout] 148 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/attributes.rs:118:1
[INFO] [stderr]                |
[INFO] [stderr]            118 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/state.rs:146:1
[INFO] [stderr]                |
[INFO] [stderr]            146 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/state.rs:153:1
[INFO] [stderr]                |
[INFO] [stderr]            153 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:25:1
[INFO] [stderr]               |
[INFO] [stderr]            25 | #[ffi_function]
[INFO] [stderr]               | ^^^^^^^^^^^^^^^
[INFO] [stderr]               |
[INFO] [stderr]               = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `debug_difficylty_attributes` in module `attributes`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:59:41
[INFO] [stderr]               |
[INFO] [stderr]            59 |         .register(function!(attributes::debug_difficylty_attributes))
[INFO] [stderr]               |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in `attributes`
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `debug_performance_attributes` in module `attributes`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:60:41
[INFO] [stderr]               |
[INFO] [stderr]            60 |         .register(function!(attributes::debug_performance_attributes))
[INFO] [stderr]               |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]               |
[INFO] [stderr]              ::: rosu_pp_ffi/src/attributes.rs:60:1
[INFO] [stderr]               |
[INFO] [stderr]            60 | pub struct PerformanceAttributes {
[INFO] [stderr]               | -------------------------------- similarly named struct `PerformanceAttributes` defined here
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:150:5
[INFO] [stdout]     |
[INFO] [stdout] 150 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 151 | |     pub fn build(&self, beatmap: *const Beatmap) -> BeatmapAttributes {
[INFO] [stdout] 152 | |         let beatmap = unsafe {
[INFO] [stdout] 153 | |             beatmap
[INFO] [stdout] ...   |
[INFO] [stdout] 200 | |         builder.build().into()
[INFO] [stdout] 201 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 150 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 151 |     pub fn build(&self, beatmap: *const Beatmap) -> BeatmapAttributes {
[INFO] [stdout] ...
[INFO] [stdout] 200 |         builder.build().into()
[INFO] [stdout] 201 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]               |
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:84:6
[INFO] [stdout]    |
[INFO] [stdout] 84 | impl BeatmapAttributesBuilder {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 84 | impl unsafe(BeatmapAttributesBuilder) {
[INFO] [stdout]    |      +++++++                        +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]            help: a struct with a similar name exists
[INFO] [stderr]               |
[INFO] [stderr]            60 -         .register(function!(attributes::debug_performance_attributes))
[INFO] [stderr]            60 +         .register(function!(attributes::PerformanceAttributes))
[INFO] [stderr]               |
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `debug_score_state` in module `state`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:61:36
[INFO] [stderr]               |
[INFO] [stderr]            61 |         .register(function!(state::debug_score_state))
[INFO] [stderr]               |                                    ^^^^^^^^^^^^^^^^^ not found in `state`
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `calculate_accuacy` in module `state`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:62:36
[INFO] [stderr]               |
[INFO] [stderr]            62 |         .register(function!(state::calculate_accuacy))
[INFO] [stderr]               |                                    ^^^^^^^^^^^^^^^^^ not found in `state`
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: aborting due to 15 previous errors
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            For more information about this error, try `rustc --explain E0425`.
[INFO] [stderr] help: to report this as a bug, open an issue at https://github.com/rust-lang/rust/issues, quoting the full output of this command
[INFO] [stderr] help: to possibly apply more fixes, pass in the `--broken-code` flag
[INFO] [stderr] note: original diagnostics will follow:
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 | /     #[ffi_service_ctor]
[INFO] [stdout] 109 | |     pub fn new(beatmap: &'a Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 110 | |         Ok(Self {
[INFO] [stdout] 111 | |             inner: &beatmap.inner.hit_objects,
[INFO] [stdout] ...   |
[INFO] [stdout] 114 | |         })
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 108 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 109 |     pub fn new(beatmap: &'a Beatmap) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 114 |         })
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 119 | |         self.len
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 119 |         self.len
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn get(&mut self, index: u32) -> FFIOption<HitObject> {
[INFO] [stdout] 124 | |         if index < self.len {
[INFO] [stdout] 125 | |             FFIOption::some(unsafe { self.get_unchecked(index) })
[INFO] [stdout] ...   |
[INFO] [stdout] 129 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn get(&mut self, index: u32) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 128 |         }
[INFO] [stdout] 129 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 132 | |     pub fn next(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] 133 | |         if self.index < self.len {
[INFO] [stdout] 134 | |             self.index += 1;
[INFO] [stdout] ...   |
[INFO] [stdout] 139 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 131 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 132 |     pub fn next(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 138 |         }
[INFO] [stdout] 139 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:141:5
[INFO] [stdout]     |
[INFO] [stdout] 141 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 142 | |     pub fn prev(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] 143 | |         if self.index > 0 {
[INFO] [stdout] 144 | |             self.index -= 1;
[INFO] [stdout] ...   |
[INFO] [stdout] 149 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 141 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 142 |     pub fn prev(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 148 |         }
[INFO] [stdout] 149 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:151:5
[INFO] [stdout]     |
[INFO] [stdout] 151 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 152 | |     pub fn reset(&mut self) {
[INFO] [stdout] 153 | |         self.index = 0;
[INFO] [stdout] 154 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 151 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 152 |     pub fn reset(&mut self) {
[INFO] [stdout] 153 |         self.index = 0;
[INFO] [stdout] 154 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:107:10
[INFO] [stdout]     |
[INFO] [stdout] 107 | impl<'a> HitObjects<'a> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 107 | impl<'a> unsafe(HitObjects<'a>) {
[INFO] [stdout]     |          +++++++              +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | /     #[ffi_service_ctor]
[INFO] [stdout] 25 | |     pub fn from_bytes(data: FFISlice<u8>) -> Result<Self, Error> {
[INFO] [stdout] 26 | |         Ok(Self {
[INFO] [stdout] 27 | |             inner: rosu_pp::Beatmap::from_bytes(data.as_slice())?,
[INFO] [stdout] 28 | |         })
[INFO] [stdout] 29 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 24 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 25 |     pub fn from_bytes(data: FFISlice<u8>) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 28 |         })
[INFO] [stdout] 29 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | /     #[ffi_service_ctor]
[INFO] [stdout] 32 | |     pub fn from_path(path: AsciiPointer) -> Result<Self, Error> {
[INFO] [stdout] 33 | |         Ok(Self {
[INFO] [stdout] 34 | |             inner: rosu_pp::Beatmap::from_path(
[INFO] [stdout] ...  |
[INFO] [stdout] 37 | |         })
[INFO] [stdout] 38 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 31 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 32 |     pub fn from_path(path: AsciiPointer) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 37 |         })
[INFO] [stdout] 38 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 | /     #[ffi_service_ctor]
[INFO] [stdout] 41 | |     pub fn from_clone(beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 42 | |         Ok(Self {
[INFO] [stdout] 43 | |             inner: beatmap.inner.clone(),
[INFO] [stdout] 44 | |         })
[INFO] [stdout] 45 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 40 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 41 |     pub fn from_clone(beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 44 |         })
[INFO] [stdout] 45 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 | /     /// Convert a Beatmap to the specified mode
[INFO] [stdout] 48 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 | |     pub fn convert(&mut self, mode: Mode, mods: &Mods) -> bool {
[INFO] [stdout] 50 | |         self.inner.convert_mut(mode.into(), &GameMods::from(mods.mods.clone())).is_ok()
[INFO] [stdout] 51 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 47 ~     unsafe(/// Convert a Beatmap to the specified mode
[INFO] [stdout] 48 |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 |     pub fn convert(&mut self, mode: Mode, mods: &Mods) -> bool {
[INFO] [stdout] 50 |         self.inner.convert_mut(mode.into(), &GameMods::from(mods.mods.clone())).is_ok()
[INFO] [stdout] 51 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 54 | |     pub fn bpm(&mut self) -> f64 {
[INFO] [stdout] 55 | |         self.inner.bpm()
[INFO] [stdout] 56 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 53 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 54 |     pub fn bpm(&mut self) -> f64 {
[INFO] [stdout] 55 |         self.inner.bpm()
[INFO] [stdout] 56 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:58:5
[INFO] [stdout]    |
[INFO] [stdout] 58 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 59 | |     pub fn total_break_time(&mut self) -> f64 {
[INFO] [stdout] 60 | |         self.inner.total_break_time()
[INFO] [stdout] 61 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 58 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 59 |     pub fn total_break_time(&mut self) -> f64 {
[INFO] [stdout] 60 |         self.inner.total_break_time()
[INFO] [stdout] 61 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 63 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 64 | |     pub fn version(&mut self) -> i32 {
[INFO] [stdout] 65 | |         self.inner.version
[INFO] [stdout] 66 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 63 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 64 |     pub fn version(&mut self) -> i32 {
[INFO] [stdout] 65 |         self.inner.version
[INFO] [stdout] 66 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 69 | |     pub fn is_convert(&mut self) -> bool {
[INFO] [stdout] 70 | |         self.inner.is_convert
[INFO] [stdout] 71 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 68 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 69 |     pub fn is_convert(&mut self) -> bool {
[INFO] [stdout] 70 |         self.inner.is_convert
[INFO] [stdout] 71 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:74:5
[INFO] [stdout]    |
[INFO] [stdout] 74 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 75 | |     pub fn stack_leniency(&mut self) -> f32 {
[INFO] [stdout] 76 | |         self.inner.stack_leniency
[INFO] [stdout] 77 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 74 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 75 |     pub fn stack_leniency(&mut self) -> f32 {
[INFO] [stdout] 76 |         self.inner.stack_leniency
[INFO] [stdout] 77 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:79:5
[INFO] [stdout]    |
[INFO] [stdout] 79 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 80 | |     pub fn mode(&mut self) -> Mode {
[INFO] [stdout] 81 | |         self.inner.mode.into()
[INFO] [stdout] 82 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 79 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 80 |     pub fn mode(&mut self) -> Mode {
[INFO] [stdout] 81 |         self.inner.mode.into()
[INFO] [stdout] 82 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 | |     pub fn ar(&mut self) -> f32 {
[INFO] [stdout] 87 | |         self.inner.ar
[INFO] [stdout] 88 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 |     pub fn ar(&mut self) -> f32 {
[INFO] [stdout] 87 |         self.inner.ar
[INFO] [stdout] 88 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 | |     pub fn cs(&mut self) -> f32 {
[INFO] [stdout] 92 | |         self.inner.ar
[INFO] [stdout] 93 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 90 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 |     pub fn cs(&mut self) -> f32 {
[INFO] [stdout] 92 |         self.inner.ar
[INFO] [stdout] 93 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 | |     pub fn hp(&mut self) -> f32 {
[INFO] [stdout] 97 | |         self.inner.ar
[INFO] [stdout] 98 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 95 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 |     pub fn hp(&mut self) -> f32 {
[INFO] [stdout] 97 |         self.inner.ar
[INFO] [stdout] 98 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 | |     pub fn od(&mut self) -> f32 {
[INFO] [stdout] 102 | |         self.inner.ar
[INFO] [stdout] 103 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 100 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 |     pub fn od(&mut self) -> f32 {
[INFO] [stdout] 102 |         self.inner.ar
[INFO] [stdout] 103 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 106 | |     pub fn slider_multiplier(&mut self) -> f64 {
[INFO] [stdout] 107 | |         self.inner.slider_multiplier
[INFO] [stdout] 108 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 105 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 106 |     pub fn slider_multiplier(&mut self) -> f64 {
[INFO] [stdout] 107 |         self.inner.slider_multiplier
[INFO] [stdout] 108 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 111 | |     pub fn slider_tick_rate(&mut self) -> f64 {
[INFO] [stdout] 112 | |         self.inner.slider_tick_rate
[INFO] [stdout] 113 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 110 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 111 |     pub fn slider_tick_rate(&mut self) -> f64 {
[INFO] [stdout] 112 |         self.inner.slider_tick_rate
[INFO] [stdout] 113 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 115 | /     /// Check whether hitobjects appear too suspicious for further calculation.
[INFO] [stdout] 116 | |     ///
[INFO] [stdout] 117 | |     /// Sometimes a [`Beatmap`] isn't created for gameplay but rather to test
[INFO] [stdout] 118 | |     /// the limits of osu! itself. Difficulty- and/or performance calculation
[INFO] [stdout] ...   |
[INFO] [stdout] 123 | |         self.inner.check_suspicion().map_err(Into::into).err().into()
[INFO] [stdout] 124 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 115 ~     unsafe(/// Check whether hitobjects appear too suspicious for further calculation.
[INFO] [stdout] 116 |     ///
[INFO] [stdout] ...
[INFO] [stdout] 123 |         self.inner.check_suspicion().map_err(Into::into).err().into()
[INFO] [stdout] 124 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:23:6
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl Beatmap {
[INFO] [stdout]    |      ^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl unsafe(Beatmap) {
[INFO] [stdout]    |      +++++++       +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | /     #[ffi_service_ctor]
[INFO] [stdout] 39 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 40 | |         Ok(Self::default())
[INFO] [stdout] 41 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 38 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 39 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 40 |         Ok(Self::default())
[INFO] [stdout] 41 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 44 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 45 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 46 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 43 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 44 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 45 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 46 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 50 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 51 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 48 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 50 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 51 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | /     #[ffi_service_method(on_panic = "ffi_error")]
[INFO] [stdout] 54 | |     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 55 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 56 | |             str.as_str()?,
[INFO] [stdout] 57 | |         ));
[INFO] [stdout] 58 | |         Ok(())
[INFO] [stdout] 59 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 53 ~     unsafe(#[ffi_service_method(on_panic = "ffi_error")]
[INFO] [stdout] 54 |     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] ...
[INFO] [stdout] 58 |         Ok(())
[INFO] [stdout] 59 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 62 | |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 63 | |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 64 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 61 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 62 |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 63 |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 64 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 67 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 68 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 69 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 66 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 67 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 68 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 69 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 72 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 73 | |         self.ar = Some(ar);
[INFO] [stdout] 74 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 71 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 72 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 73 |         self.ar = Some(ar);
[INFO] [stdout] 74 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 77 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 78 | |         self.cs = Some(cs);
[INFO] [stdout] 79 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 76 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 77 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 78 |         self.cs = Some(cs);
[INFO] [stdout] 79 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:81:5
[INFO] [stdout]    |
[INFO] [stdout] 81 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 82 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 83 | |         self.hp = Some(hp);
[INFO] [stdout] 84 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 81 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 82 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 83 |         self.hp = Some(hp);
[INFO] [stdout] 84 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 87 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 88 | |         self.od = Some(od);
[INFO] [stdout] 89 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 86 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 87 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 88 |         self.od = Some(od);
[INFO] [stdout] 89 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 92 | |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 93 | |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 94 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 91 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 92 |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 93 |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 94 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:96:5
[INFO] [stdout]    |
[INFO] [stdout] 96 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 97 | |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 98 | |         self.lazer = Some(lazer);
[INFO] [stdout] 99 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 96 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 97 |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 98 |         self.lazer = Some(lazer);
[INFO] [stdout] 99 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/difficulty.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 102 | |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::DifficultyAttributes {
[INFO] [stdout] 103 | |         self.construct().calculate(&beatmap.inner).into()
[INFO] [stdout] 104 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 101 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 102 |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::DifficultyAttributes {
[INFO] [stdout] 103 |         self.construct().calculate(&beatmap.inner).into()
[INFO] [stdout] 104 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/difficulty.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 107 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 108 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 109 | |             return mods.clock_rate().unwrap_or(1.0)
[INFO] [stdout] ...   |
[INFO] [stdout] 116 | |         1.0
[INFO] [stdout] 117 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 106 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 107 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 116 |         1.0
[INFO] [stdout] 117 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:37:6
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl Difficulty {
[INFO] [stdout]    |      ^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl unsafe(Difficulty) {
[INFO] [stdout]    |      +++++++          +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/attributes.rs:108:3
[INFO] [stdout]     |
[INFO] [stdout] 108 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 108 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/attributes.rs:119:3
[INFO] [stdout]     |
[INFO] [stdout] 119 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 119 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | /     #[ffi_service_ctor]
[INFO] [stdout] 19 | |     pub fn from_c_str(str: AsciiPointer<'_>) -> Result<Self, Error> {
[INFO] [stdout] 20 | |         Ok(Self {
[INFO] [stdout] 21 | |             inner: MaybeUninit::new(str.as_c_str().ok_or(Error::Null)?.to_owned()),
[INFO] [stdout] 22 | |             is_init: true
[INFO] [stdout] 23 | |         })
[INFO] [stdout] 24 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 18 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 19 |     pub fn from_c_str(str: AsciiPointer<'_>) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 23 |         })
[INFO] [stdout] 24 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | /     #[ffi_service_ctor]
[INFO] [stdout] 27 | |     pub fn empty() -> Result<Self, Error> {
[INFO] [stdout] 28 | |         Ok(Self {
[INFO] [stdout] 29 | |             inner: MaybeUninit::uninit(),
[INFO] [stdout] 30 | |             is_init: false
[INFO] [stdout] 31 | |         })
[INFO] [stdout] 32 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 26 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 27 |     pub fn empty() -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 31 |         })
[INFO] [stdout] 32 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 | |     pub fn is_init(&self) -> bool {
[INFO] [stdout] 36 | |        self.is_init
[INFO] [stdout] 37 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 34 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 |     pub fn is_init(&self) -> bool {
[INFO] [stdout] 36 |        self.is_init
[INFO] [stdout] 37 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 | |     pub fn to_cstr(&self) -> AsciiPointer<'_> {
[INFO] [stdout] 41 | |         AsciiPointer::from_cstr(unsafe { self.inner.assume_init_ref() })
[INFO] [stdout] 42 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 |     pub fn to_cstr(&self) -> AsciiPointer<'_> {
[INFO] [stdout] 41 |         AsciiPointer::from_cstr(unsafe { self.inner.assume_init_ref() })
[INFO] [stdout] 42 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl OwnedString {
[INFO] [stdout]    |      ^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl unsafe(OwnedString) {
[INFO] [stdout]    |      +++++++           +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 50 | /     #[ffi_service_ctor]
[INFO] [stdout] 51 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 52 | |         Ok(Self::default())
[INFO] [stdout] 53 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 50 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 51 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 52 |         Ok(Self::default())
[INFO] [stdout] 53 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 55 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 56 | |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 57 | |         self.mode = Some(mode);
[INFO] [stdout] 58 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 55 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 56 |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 57 |         self.mode = Some(mode);
[INFO] [stdout] 58 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 61 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 62 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 63 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 60 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 61 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 62 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 63 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 67 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 68 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 65 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 67 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 68 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 | /     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 71 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 72 | |             str.as_str()?,
[INFO] [stdout] 73 | |         ));
[INFO] [stdout] 74 | |         Ok(())
[INFO] [stdout] 75 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 70 ~     unsafe(pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 71 |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] ...
[INFO] [stdout] 74 |         Ok(())
[INFO] [stdout] 75 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 78 | |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 79 | |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 80 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 77 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 78 |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 79 |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 80 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 83 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 84 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 85 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 82 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 83 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 84 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 85 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 88 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 89 | |         self.ar = Some(ar);
[INFO] [stdout] 90 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 87 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 88 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 89 |         self.ar = Some(ar);
[INFO] [stdout] 90 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:92:5
[INFO] [stdout]    |
[INFO] [stdout] 92 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 93 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 94 | |         self.cs = Some(cs);
[INFO] [stdout] 95 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 92 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 93 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 94 |         self.cs = Some(cs);
[INFO] [stdout] 95 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:97:5
[INFO] [stdout]     |
[INFO] [stdout]  97 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  98 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout]  99 | |         self.hp = Some(hp);
[INFO] [stdout] 100 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout]  97 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  98 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout]  99 |         self.hp = Some(hp);
[INFO] [stdout] 100 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 103 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 104 | |         self.od = Some(od);
[INFO] [stdout] 105 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 102 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 103 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 104 |         self.od = Some(od);
[INFO] [stdout] 105 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 | |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 109 | |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 110 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 107 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 109 |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 110 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 | |     pub fn state(&mut self, state: ScoreState) {
[INFO] [stdout] 114 | |         self.state = Some(state);
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 112 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 |     pub fn state(&mut self, state: ScoreState) {
[INFO] [stdout] 114 |         self.state = Some(state);
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn accuracy(&mut self, accuracy: f64) {
[INFO] [stdout] 119 | |         self.accuracy = Some(accuracy);
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn accuracy(&mut self, accuracy: f64) {
[INFO] [stdout] 119 |         self.accuracy = Some(accuracy);
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn misses(&mut self, misses: u32) {
[INFO] [stdout] 124 | |         self.misses = Some(misses);
[INFO] [stdout] 125 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn misses(&mut self, misses: u32) {
[INFO] [stdout] 124 |         self.misses = Some(misses);
[INFO] [stdout] 125 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 | |     pub fn combo(&mut self, combo: u32) {
[INFO] [stdout] 129 | |         self.combo = Some(combo);
[INFO] [stdout] 130 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 127 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 |     pub fn combo(&mut self, combo: u32) {
[INFO] [stdout] 129 |         self.combo = Some(combo);
[INFO] [stdout] 130 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 | |     pub fn hitresult_priority(&mut self, hitresult_priority: HitResultPriority) {
[INFO] [stdout] 134 | |         self.hitresult_priority = Some(hitresult_priority);
[INFO] [stdout] 135 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 132 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 |     pub fn hitresult_priority(&mut self, hitresult_priority: HitResultPriority) {
[INFO] [stdout] 134 |         self.hitresult_priority = Some(hitresult_priority);
[INFO] [stdout] 135 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 | |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 139 | |         self.lazer = Some(lazer);
[INFO] [stdout] 140 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 137 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 139 |         self.lazer = Some(lazer);
[INFO] [stdout] 140 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:142:5
[INFO] [stdout]     |
[INFO] [stdout] 142 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 143 | |     pub fn large_tick_hits(&mut self, large_tick_hits: u32) {
[INFO] [stdout] 144 | |         self.large_tick_hits = Some(large_tick_hits);
[INFO] [stdout] 145 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 142 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 143 |     pub fn large_tick_hits(&mut self, large_tick_hits: u32) {
[INFO] [stdout] 144 |         self.large_tick_hits = Some(large_tick_hits);
[INFO] [stdout] 145 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:147:5
[INFO] [stdout]     |
[INFO] [stdout] 147 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 148 | |     pub fn small_tick_hits(&mut self, small_tick_hits: u32) {
[INFO] [stdout] 149 | |         self.small_tick_hits = Some(small_tick_hits);
[INFO] [stdout] 150 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 147 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 148 |     pub fn small_tick_hits(&mut self, small_tick_hits: u32) {
[INFO] [stdout] 149 |         self.small_tick_hits = Some(small_tick_hits);
[INFO] [stdout] 150 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:152:5
[INFO] [stdout]     |
[INFO] [stdout] 152 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 153 | |     pub fn slider_end_hits(&mut self, slider_end_hits: u32) {
[INFO] [stdout] 154 | |         self.slider_end_hits = Some(slider_end_hits);
[INFO] [stdout] 155 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 152 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 153 |     pub fn slider_end_hits(&mut self, slider_end_hits: u32) {
[INFO] [stdout] 154 |         self.slider_end_hits = Some(slider_end_hits);
[INFO] [stdout] 155 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:157:5
[INFO] [stdout]     |
[INFO] [stdout] 157 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 158 | |     pub fn n300(&mut self, n300: u32) {
[INFO] [stdout] 159 | |         self.n300 = Some(n300);
[INFO] [stdout] 160 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 157 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 158 |     pub fn n300(&mut self, n300: u32) {
[INFO] [stdout] 159 |         self.n300 = Some(n300);
[INFO] [stdout] 160 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:162:5
[INFO] [stdout]     |
[INFO] [stdout] 162 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 163 | |     pub fn n100(&mut self, n100: u32) {
[INFO] [stdout] 164 | |         self.n100 = Some(n100);
[INFO] [stdout] 165 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 162 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 163 |     pub fn n100(&mut self, n100: u32) {
[INFO] [stdout] 164 |         self.n100 = Some(n100);
[INFO] [stdout] 165 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:167:5
[INFO] [stdout]     |
[INFO] [stdout] 167 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 168 | |     pub fn n50(&mut self, n50: u32) {
[INFO] [stdout] 169 | |         self.n50 = Some(n50);
[INFO] [stdout] 170 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 167 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 168 |     pub fn n50(&mut self, n50: u32) {
[INFO] [stdout] 169 |         self.n50 = Some(n50);
[INFO] [stdout] 170 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:172:5
[INFO] [stdout]     |
[INFO] [stdout] 172 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 173 | |     pub fn n_katu(&mut self, n_katu: u32) {
[INFO] [stdout] 174 | |         self.n_katu = Some(n_katu);
[INFO] [stdout] 175 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 172 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 173 |     pub fn n_katu(&mut self, n_katu: u32) {
[INFO] [stdout] 174 |         self.n_katu = Some(n_katu);
[INFO] [stdout] 175 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:177:5
[INFO] [stdout]     |
[INFO] [stdout] 177 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 178 | |     pub fn n_geki(&mut self, n_geki: u32) {
[INFO] [stdout] 179 | |         self.n_geki = Some(n_geki);
[INFO] [stdout] 180 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 177 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 178 |     pub fn n_geki(&mut self, n_geki: u32) {
[INFO] [stdout] 179 |         self.n_geki = Some(n_geki);
[INFO] [stdout] 180 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:182:5
[INFO] [stdout]     |
[INFO] [stdout] 182 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 183 | |     pub fn generate_state(&self, beatmap: &Beatmap) -> state::ScoreState {
[INFO] [stdout] 184 | |         let mut performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 185 | |         performance.generate_state().into()
[INFO] [stdout] 186 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 182 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 183 |     pub fn generate_state(&self, beatmap: &Beatmap) -> state::ScoreState {
[INFO] [stdout] 184 |         let mut performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 185 |         performance.generate_state().into()
[INFO] [stdout] 186 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:188:5
[INFO] [stdout]     |
[INFO] [stdout] 188 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 189 | |     pub fn generate_state_from_difficulty(
[INFO] [stdout] 190 | |         &self,
[INFO] [stdout] 191 | |         difficulty_attr: DifficultyAttributes,
[INFO] [stdout] ...   |
[INFO] [stdout] 196 | |         performance.generate_state().into()
[INFO] [stdout] 197 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 188 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 189 |     pub fn generate_state_from_difficulty(
[INFO] [stdout] ...
[INFO] [stdout] 196 |         performance.generate_state().into()
[INFO] [stdout] 197 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:199:5
[INFO] [stdout]     |
[INFO] [stdout] 199 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 200 | |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::PerformanceAttributes {
[INFO] [stdout] 201 | |         let performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 202 | |         performance.calculate().into()
[INFO] [stdout] 203 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 199 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 200 |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::PerformanceAttributes {
[INFO] [stdout] 201 |         let performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 202 |         performance.calculate().into()
[INFO] [stdout] 203 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:205:5
[INFO] [stdout]     |
[INFO] [stdout] 205 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 206 | |     pub fn calculate_from_difficulty(
[INFO] [stdout] 207 | |         &self,
[INFO] [stdout] 208 | |         difficulty_attr: DifficultyAttributes,
[INFO] [stdout] ...   |
[INFO] [stdout] 213 | |         performance.calculate().into()
[INFO] [stdout] 214 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 205 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 206 |     pub fn calculate_from_difficulty(
[INFO] [stdout] ...
[INFO] [stdout] 213 |         performance.calculate().into()
[INFO] [stdout] 214 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:216:5
[INFO] [stdout]     |
[INFO] [stdout] 216 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 217 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 218 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 219 | |             return mods.clock_rate().unwrap_or(1.0);
[INFO] [stdout] ...   |
[INFO] [stdout] 226 | |         1.0
[INFO] [stdout] 227 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 216 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 217 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 226 |         1.0
[INFO] [stdout] 227 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:49:6
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Performance {
[INFO] [stdout]    |      ^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl unsafe(Performance) {
[INFO] [stdout]    |      +++++++           +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/state.rs:147:3
[INFO] [stdout]     |
[INFO] [stdout] 147 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 147 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/state.rs:154:3
[INFO] [stdout]     |
[INFO] [stdout] 154 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 154 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | /     #[ffi_service_ctor]
[INFO] [stdout] 22 | |     pub fn new(mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 23 | |         Ok(Self {
[INFO] [stdout] 24 | |             mods: rosu_mods::GameMods::new(),
[INFO] [stdout] 25 | |             mode: Some(mode)
[INFO] [stdout] 26 | |         })
[INFO] [stdout] 27 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 21 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 22 |     pub fn new(mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 26 |         })
[INFO] [stdout] 27 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | /     #[ffi_service_ctor]
[INFO] [stdout] 30 | |     pub fn from_acronyms(str: AsciiPointer, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 31 | |         Ok(Self {
[INFO] [stdout] 32 | |             mods: rosu_mods::GameMods::from_intermode(&rosu_mods::GameModsIntermode::from_acronyms(
[INFO] [stdout] ...  |
[INFO] [stdout] 36 | |         })
[INFO] [stdout] 37 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 29 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 30 |     pub fn from_acronyms(str: AsciiPointer, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 36 |         })
[INFO] [stdout] 37 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | /     #[ffi_service_ctor]
[INFO] [stdout] 40 | |     pub fn from_bits(bits: u32, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 41 | |         Ok(Self {
[INFO] [stdout] 42 | |             mods: rosu_mods::GameMods::from_intermode(&rosu_mods::GameModsIntermode::from_bits(bits), mode.into()),
[INFO] [stdout] 43 | |             mode: Some(mode)
[INFO] [stdout] 44 | |         })
[INFO] [stdout] 45 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 40 |     pub fn from_bits(bits: u32, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 44 |         })
[INFO] [stdout] 45 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | /     #[ffi_service_ctor]
[INFO] [stdout] 49 | |     pub fn from_json(str: AsciiPointer, mode: Mode, deny_unknown_fields: bool) -> Result<Self, Error> {
[INFO] [stdout] 50 | |         let s = str.as_str()?;
[INFO] [stdout] 51 | |         let mut d = serde_json::Deserializer::from_str(s);
[INFO] [stdout] ...  |
[INFO] [stdout] 56 | |         })
[INFO] [stdout] 57 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 48 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 49 |     pub fn from_json(str: AsciiPointer, mode: Mode, deny_unknown_fields: bool) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 56 |         })
[INFO] [stdout] 57 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 60 | |     pub fn remove_unknown_mods(&mut self) {
[INFO] [stdout] 61 | |         self.mods = self.mods.clone().into_iter().filter(|m| m.kind() != UnknownMod::kind()).collect();
[INFO] [stdout] 62 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 59 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 60 |     pub fn remove_unknown_mods(&mut self) {
[INFO] [stdout] 61 |         self.mods = self.mods.clone().into_iter().filter(|m| m.kind() != UnknownMod::kind()).collect();
[INFO] [stdout] 62 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 | |     pub fn sanitize(&mut self) {
[INFO] [stdout] 67 | |         self.mods.sanitize();
[INFO] [stdout] 68 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 65 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 |     pub fn sanitize(&mut self) {
[INFO] [stdout] 67 |         self.mods.sanitize();
[INFO] [stdout] 68 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 71 | |     pub fn bits(&mut self) -> u32 {
[INFO] [stdout] 72 | |         self.mods.bits()
[INFO] [stdout] 73 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 70 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 71 |     pub fn bits(&mut self) -> u32 {
[INFO] [stdout] 72 |         self.mods.bits()
[INFO] [stdout] 73 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 76 | |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 77 | |         self.mods.len() as u32
[INFO] [stdout] 78 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 75 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 76 |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 77 |         self.mods.len() as u32
[INFO] [stdout] 78 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:80:5
[INFO] [stdout]    |
[INFO] [stdout] 80 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 81 | |     pub fn json(&mut self, str: &mut OwnedString) {
[INFO] [stdout] 82 | |         str.replace(serde_json::to_string_pretty(&self.mods).unwrap())
[INFO] [stdout] 83 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 80 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 81 |     pub fn json(&mut self, str: &mut OwnedString) {
[INFO] [stdout] 82 |         str.replace(serde_json::to_string_pretty(&self.mods).unwrap())
[INFO] [stdout] 83 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 | |     pub fn insert_json(&mut self, str: AsciiPointer, deny_unknown_fields: bool) -> bool {
[INFO] [stdout] 87 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 88 | |             let mut d = serde_json::Deserializer::from_str(s);
[INFO] [stdout] ...  |
[INFO] [stdout] 95 | |         false
[INFO] [stdout] 96 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 |     pub fn insert_json(&mut self, str: AsciiPointer, deny_unknown_fields: bool) -> bool {
[INFO] [stdout] ...
[INFO] [stdout] 95 |         false
[INFO] [stdout] 96 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:98:5
[INFO] [stdout]     |
[INFO] [stdout]  98 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 | |     pub fn insert(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] 100 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 101 | |             self.mods.insert(GameMod::new(s, self.mode.unwrap_or_default().into()));
[INFO] [stdout] ...   |
[INFO] [stdout] 104 | |         false
[INFO] [stdout] 105 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout]  98 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 |     pub fn insert(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] ...
[INFO] [stdout] 104 |         false
[INFO] [stdout] 105 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 | |     pub fn contains(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] 109 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 110 | |             if let Ok(m) = s.parse::<Acronym>(){
[INFO] [stdout] ...   |
[INFO] [stdout] 114 | |         false
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 107 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 |     pub fn contains(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] ...
[INFO] [stdout] 114 |         false
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn clear(&mut self) {
[INFO] [stdout] 119 | |         self.mods = rosu_mods::GameMods::new();
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn clear(&mut self) {
[INFO] [stdout] 119 |         self.mods = rosu_mods::GameMods::new();
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn clock_rate(&mut self) -> FFIOption<f64> {
[INFO] [stdout] 124 | |         self.mods.clock_rate().into()
[INFO] [stdout] 125 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn clock_rate(&mut self) -> FFIOption<f64> {
[INFO] [stdout] 124 |         self.mods.clock_rate().into()
[INFO] [stdout] 125 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:20:6
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl Mods {
[INFO] [stdout]    |      ^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl unsafe(Mods) {
[INFO] [stdout]    |      +++++++    +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | /     /// Create a [`GradualDifficulty`] for a map of any mode.
[INFO] [stdout] 23 | |     #[ffi_service_ctor]
[INFO] [stdout] 24 | |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 25 | |         Ok(Self { inner: rosu_pp::GradualDifficulty::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 26 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 22 ~     unsafe(/// Create a [`GradualDifficulty`] for a map of any mode.
[INFO] [stdout] 23 |     #[ffi_service_ctor]
[INFO] [stdout] 24 |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 25 |         Ok(Self { inner: rosu_pp::GradualDifficulty::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 26 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | /     /// Create a [`GradualDifficulty`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 29 | |     #[ffi_service_ctor]
[INFO] [stdout] 30 | |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 31 | |         Ok(Self { inner: rosu_pp::GradualDifficulty::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 32 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 28 ~     unsafe(/// Create a [`GradualDifficulty`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 29 |     #[ffi_service_ctor]
[INFO] [stdout] 30 |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 31 |         Ok(Self { inner: rosu_pp::GradualDifficulty::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 32 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 | |     pub fn next(&mut self) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 36 | |         self.inner.next().map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 37 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 34 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 |     pub fn next(&mut self) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 36 |         self.inner.next().map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 37 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 | |     pub fn nth(&mut self, n: u32) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 41 | |         self.inner.nth(n as usize).map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 42 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 |     pub fn nth(&mut self, n: u32) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 41 |         self.inner.nth(n as usize).map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 42 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 45 | |     pub fn len(&self) -> u32 {
[INFO] [stdout] 46 | |         self.inner.len() as u32
[INFO] [stdout] 47 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 44 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 45 |     pub fn len(&self) -> u32 {
[INFO] [stdout] 46 |         self.inner.len() as u32
[INFO] [stdout] 47 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:21:6
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl GradualDifficulty {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl unsafe(GradualDifficulty) {
[INFO] [stdout]    |      +++++++                 +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 | /     /// Create a [`GradualPerformance`] for a map of any mode.
[INFO] [stdout] 62 | |     #[ffi_service_ctor]
[INFO] [stdout] 63 | |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 64 | |         Ok(Self { inner: rosu_pp::GradualPerformance::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 65 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 61 ~     unsafe(/// Create a [`GradualPerformance`] for a map of any mode.
[INFO] [stdout] 62 |     #[ffi_service_ctor]
[INFO] [stdout] 63 |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 64 |         Ok(Self { inner: rosu_pp::GradualPerformance::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 65 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | /     /// Create a [`GradualPerformance`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 68 | |     #[ffi_service_ctor]
[INFO] [stdout] 69 | |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 70 | |         Ok(Self { inner: rosu_pp::GradualPerformance::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 71 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 67 ~     unsafe(/// Create a [`GradualPerformance`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 68 |     #[ffi_service_ctor]
[INFO] [stdout] 69 |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 70 |         Ok(Self { inner: rosu_pp::GradualPerformance::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 71 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 | /     /// Process the next hit object and calculate the performance attributes
[INFO] [stdout] 74 | |     /// for the resulting score state.
[INFO] [stdout] 75 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 76 | |     pub fn next(&mut self, state: ScoreState) -> FFIOption<attributes::PerformanceAttributes> {
[INFO] [stdout] 77 | |         self.inner.next(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 78 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 73 ~     unsafe(/// Process the next hit object and calculate the performance attributes
[INFO] [stdout] 74 |     /// for the resulting score state.
[INFO] [stdout] ...
[INFO] [stdout] 77 |         self.inner.next(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 78 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:80:5
[INFO] [stdout]    |
[INFO] [stdout] 80 | /     /// Process all remaining hit objects and calculate the final performance
[INFO] [stdout] 81 | |     /// attributes.
[INFO] [stdout] 82 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 83 | |     pub fn last(&mut self, state: ScoreState) -> FFIOption<attributes::PerformanceAttributes> {
[INFO] [stdout] 84 | |         self.inner.last(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 85 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 80 ~     unsafe(/// Process all remaining hit objects and calculate the final performance
[INFO] [stdout] 81 |     /// attributes.
[INFO] [stdout] ...
[INFO] [stdout] 84 |         self.inner.last(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 85 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 | /     /// Process everything up to the next `n`th hitobject and calculate the
[INFO] [stdout] 88 | |     /// performance attributes for the resulting score state.
[INFO] [stdout] 89 | |     ///
[INFO] [stdout] 90 | |     /// Note that the count is zero-indexed, so `n=0` will process 1 object,
[INFO] [stdout] ...  |
[INFO] [stdout] 94 | |         self.inner.nth(state.into(), n as usize).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 95 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 87 ~     unsafe(/// Process everything up to the next `n`th hitobject and calculate the
[INFO] [stdout] 88 |     /// performance attributes for the resulting score state.
[INFO] [stdout] ...
[INFO] [stdout] 94 |         self.inner.nth(state.into(), n as usize).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 95 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/gradual.rs:97:5
[INFO] [stdout]     |
[INFO] [stdout]  97 | /     /// Returns the amount of remaining objects.
[INFO] [stdout]  98 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 | |     pub fn len(&self) -> u32 {
[INFO] [stdout] 100 | |         self.inner.len() as u32
[INFO] [stdout] 101 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout]  97 ~     unsafe(/// Returns the amount of remaining objects.
[INFO] [stdout]  98 |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 |     pub fn len(&self) -> u32 {
[INFO] [stdout] 100 |         self.inner.len() as u32
[INFO] [stdout] 101 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:60:6
[INFO] [stdout]    |
[INFO] [stdout] 60 | impl GradualPerformance {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 60 | impl unsafe(GradualPerformance) {
[INFO] [stdout]    |      +++++++                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/lib.rs:26:3
[INFO] [stdout]    |
[INFO] [stdout] 26 | #[no_mangle]
[INFO] [stdout]    |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 26 | #[unsafe(no_mangle)]
[INFO] [stdout]    |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `core::slice::<impl [T]>::get_unchecked` is unsafe and requires unsafe block
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:157:9
[INFO] [stdout]     |
[INFO] [stdout] 157 |         self.inner.get_unchecked(index as usize).into()
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:156:5
[INFO] [stdout]     |
[INFO] [stdout] 156 |     unsafe fn get_unchecked(&mut self, index: u32) -> HitObject {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout]     = note: `--force-warn unsafe-op-in-unsafe-fn` implied by `--force-warn rust-2024-compatibility`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0133`.
[INFO] [stdout] 
[INFO] [stderr] error: errors present after applying fixes to crate `rosu_pp_ffi`
[INFO] [stderr]  --> rosu_pp_ffi/src/attributes.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/beatmap/mod.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/difficulty.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/gradual.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/lib.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/mods.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/owned_string.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/performance.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/state.rs
[INFO] [stderr]   = cause: error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/beatmap/mod.rs:23:6
[INFO] [stderr]               |
[INFO] [stderr]            23 | impl unsafe(Beatmap) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/difficulty.rs:37:6
[INFO] [stderr]               |
[INFO] [stderr]            37 | impl unsafe(Difficulty) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/owned_string.rs:17:6
[INFO] [stderr]               |
[INFO] [stderr]            17 | impl unsafe(OwnedString) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/performance.rs:49:6
[INFO] [stderr]               |
[INFO] [stderr]            49 | impl unsafe(Performance) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/mods.rs:20:6
[INFO] [stderr]               |
[INFO] [stderr]            20 | impl unsafe(Mods) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/gradual.rs:21:6
[INFO] [stderr]               |
[INFO] [stderr]            21 | impl unsafe(GradualDifficulty) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/attributes.rs:107:1
[INFO] [stderr]                |
[INFO] [stderr]            107 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/attributes.rs:118:1
[INFO] [stderr]                |
[INFO] [stderr]            118 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/state.rs:146:1
[INFO] [stderr]                |
[INFO] [stderr]            146 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/state.rs:153:1
[INFO] [stderr]                |
[INFO] [stderr]            153 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:25:1
[INFO] [stderr]               |
[INFO] [stderr]            25 | #[ffi_function]
[INFO] [stderr]               | ^^^^^^^^^^^^^^^
[INFO] [stderr]               |
[INFO] [stderr]               = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `debug_difficylty_attributes` in module `attributes`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:59:41
[INFO] [stderr]               |
[INFO] [stderr]            59 |         .register(function!(attributes::debug_difficylty_attributes))
[INFO] [stderr]               |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in `attributes`
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `debug_performance_attributes` in module `attributes`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:60:41
[INFO] [stderr]               |
[INFO] [stderr]            60 |         .register(function!(attributes::debug_performance_attributes))
[INFO] [stderr]               |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]               |
[INFO] [stderr]              ::: rosu_pp_ffi/src/attributes.rs:60:1
[INFO] [stderr]               |
[INFO] [stderr]            60 | pub struct PerformanceAttributes {
[INFO] [stderr]               | -------------------------------- similarly named struct `PerformanceAttributes` defined here
[INFO] [stderr]               |
[INFO] [stderr]            help: a struct with a similar name exists
[INFO] [stderr]               |
[INFO] [stderr]            60 -         .register(function!(attributes::debug_performance_attributes))
[INFO] [stderr]            60 +         .register(function!(attributes::PerformanceAttributes))
[INFO] [stderr]               |
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `debug_score_state` in module `state`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:61:36
[INFO] [stderr]               |
[INFO] [stderr]            61 |         .register(function!(state::debug_score_state))
[INFO] [stderr]               |                                    ^^^^^^^^^^^^^^^^^ not found in `state`
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `calculate_accuacy` in module `state`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:62:36
[INFO] [stderr]               |
[INFO] [stderr]            62 |         .register(function!(state::calculate_accuacy))
[INFO] [stderr]               |                                    ^^^^^^^^^^^^^^^^^ not found in `state`
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: aborting due to 15 previous errors
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            For more information about this error, try `rustc --explain E0425`.
[INFO] [stderr] help: to report this as a bug, open an issue at https://github.com/rust-lang/rust/issues, quoting the full output of this command
[INFO] [stderr] help: to possibly apply more fixes, pass in the `--broken-code` flag
[INFO] [stderr] note: original diagnostics will follow:
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_ctor]
[INFO] [stdout] 86 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 87 | |         Ok(Self::default())
[INFO] [stdout] 88 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout]    = note: `--force-warn unsafe-attr-outside-unsafe` implied by `--force-warn rust-2024-compatibility`
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 86 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 87 |         Ok(Self::default())
[INFO] [stdout] 88 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 | |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 92 | |         self.mode = Some(mode);
[INFO] [stdout] 93 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 90 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 92 |         self.mode = Some(mode);
[INFO] [stdout] 93 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 97 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 98 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 95 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 97 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 98 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 102 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 103 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 100 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 102 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 103 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 | /     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 106 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 107 | |             str.as_str()?,
[INFO] [stdout] 108 | |         ));
[INFO] [stdout] 109 | |         Ok(())
[INFO] [stdout] 110 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 105 ~     unsafe(pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 106 |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] ...
[INFO] [stdout] 109 |         Ok(())
[INFO] [stdout] 110 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 114 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 112 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 114 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 119 | |         self.ar = Some(ar);
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 119 |         self.ar = Some(ar);
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 124 | |         self.cs = Some(cs);
[INFO] [stdout] 125 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 124 |         self.cs = Some(cs);
[INFO] [stdout] 125 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 129 | |         self.hp = Some(hp);
[INFO] [stdout] 130 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 127 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 129 |         self.hp = Some(hp);
[INFO] [stdout] 130 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 134 | |         self.od = Some(od);
[INFO] [stdout] 135 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 132 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 134 |         self.od = Some(od);
[INFO] [stdout] 135 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 139 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 140 | |             return mods.clock_rate().unwrap_or(1.0)
[INFO] [stdout] ...   |
[INFO] [stdout] 147 | |         1.0
[INFO] [stdout] 148 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 137 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 147 |         1.0
[INFO] [stdout] 148 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:150:5
[INFO] [stdout]     |
[INFO] [stdout] 150 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 151 | |     pub fn build(&self, beatmap: *const Beatmap) -> BeatmapAttributes {
[INFO] [stdout] 152 | |         let beatmap = unsafe {
[INFO] [stdout] 153 | |             beatmap
[INFO] [stdout] ...   |
[INFO] [stdout] 200 | |         builder.build().into()
[INFO] [stdout] 201 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 150 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 151 |     pub fn build(&self, beatmap: *const Beatmap) -> BeatmapAttributes {
[INFO] [stdout] ...
[INFO] [stdout] 200 |         builder.build().into()
[INFO] [stdout] 201 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:84:6
[INFO] [stdout]    |
[INFO] [stdout] 84 | impl BeatmapAttributesBuilder {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 84 | impl unsafe(BeatmapAttributesBuilder) {
[INFO] [stdout]    |      +++++++                        +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 | /     #[ffi_service_ctor]
[INFO] [stdout] 109 | |     pub fn new(beatmap: &'a Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 110 | |         Ok(Self {
[INFO] [stdout] 111 | |             inner: &beatmap.inner.hit_objects,
[INFO] [stdout] ...   |
[INFO] [stdout] 114 | |         })
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 108 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 109 |     pub fn new(beatmap: &'a Beatmap) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 114 |         })
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 119 | |         self.len
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 119 |         self.len
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn get(&mut self, index: u32) -> FFIOption<HitObject> {
[INFO] [stdout] 124 | |         if index < self.len {
[INFO] [stdout] 125 | |             FFIOption::some(unsafe { self.get_unchecked(index) })
[INFO] [stdout] ...   |
[INFO] [stdout] 129 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn get(&mut self, index: u32) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 128 |         }
[INFO] [stdout] 129 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 132 | |     pub fn next(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] 133 | |         if self.index < self.len {
[INFO] [stdout] 134 | |             self.index += 1;
[INFO] [stdout] ...   |
[INFO] [stdout] 139 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 131 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 132 |     pub fn next(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 138 |         }
[INFO] [stdout] 139 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:141:5
[INFO] [stdout]     |
[INFO] [stdout] 141 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 142 | |     pub fn prev(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] 143 | |         if self.index > 0 {
[INFO] [stdout] 144 | |             self.index -= 1;
[INFO] [stdout] ...   |
[INFO] [stdout] 149 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 141 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 142 |     pub fn prev(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 148 |         }
[INFO] [stdout] 149 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:151:5
[INFO] [stdout]     |
[INFO] [stdout] 151 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 152 | |     pub fn reset(&mut self) {
[INFO] [stdout] 153 | |         self.index = 0;
[INFO] [stdout] 154 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 151 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 152 |     pub fn reset(&mut self) {
[INFO] [stdout] 153 |         self.index = 0;
[INFO] [stdout] 154 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:107:10
[INFO] [stdout]     |
[INFO] [stdout] 107 | impl<'a> HitObjects<'a> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 107 | impl<'a> unsafe(HitObjects<'a>) {
[INFO] [stdout]     |          +++++++              +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | /     #[ffi_service_ctor]
[INFO] [stdout] 25 | |     pub fn from_bytes(data: FFISlice<u8>) -> Result<Self, Error> {
[INFO] [stdout] 26 | |         Ok(Self {
[INFO] [stdout] 27 | |             inner: rosu_pp::Beatmap::from_bytes(data.as_slice())?,
[INFO] [stdout] 28 | |         })
[INFO] [stdout] 29 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 24 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 25 |     pub fn from_bytes(data: FFISlice<u8>) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 28 |         })
[INFO] [stdout] 29 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | /     #[ffi_service_ctor]
[INFO] [stdout] 32 | |     pub fn from_path(path: AsciiPointer) -> Result<Self, Error> {
[INFO] [stdout] 33 | |         Ok(Self {
[INFO] [stdout] 34 | |             inner: rosu_pp::Beatmap::from_path(
[INFO] [stdout] ...  |
[INFO] [stdout] 37 | |         })
[INFO] [stdout] 38 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 31 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 32 |     pub fn from_path(path: AsciiPointer) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 37 |         })
[INFO] [stdout] 38 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 | /     #[ffi_service_ctor]
[INFO] [stdout] 41 | |     pub fn from_clone(beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 42 | |         Ok(Self {
[INFO] [stdout] 43 | |             inner: beatmap.inner.clone(),
[INFO] [stdout] 44 | |         })
[INFO] [stdout] 45 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 40 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 41 |     pub fn from_clone(beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 44 |         })
[INFO] [stdout] 45 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 | /     /// Convert a Beatmap to the specified mode
[INFO] [stdout] 48 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 | |     pub fn convert(&mut self, mode: Mode, mods: &Mods) -> bool {
[INFO] [stdout] 50 | |         self.inner.convert_mut(mode.into(), &GameMods::from(mods.mods.clone())).is_ok()
[INFO] [stdout] 51 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 47 ~     unsafe(/// Convert a Beatmap to the specified mode
[INFO] [stdout] 48 |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 |     pub fn convert(&mut self, mode: Mode, mods: &Mods) -> bool {
[INFO] [stdout] 50 |         self.inner.convert_mut(mode.into(), &GameMods::from(mods.mods.clone())).is_ok()
[INFO] [stdout] 51 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 54 | |     pub fn bpm(&mut self) -> f64 {
[INFO] [stdout] 55 | |         self.inner.bpm()
[INFO] [stdout] 56 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 53 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 54 |     pub fn bpm(&mut self) -> f64 {
[INFO] [stdout] 55 |         self.inner.bpm()
[INFO] [stdout] 56 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:58:5
[INFO] [stdout]    |
[INFO] [stdout] 58 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 59 | |     pub fn total_break_time(&mut self) -> f64 {
[INFO] [stdout] 60 | |         self.inner.total_break_time()
[INFO] [stdout] 61 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 58 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 59 |     pub fn total_break_time(&mut self) -> f64 {
[INFO] [stdout] 60 |         self.inner.total_break_time()
[INFO] [stdout] 61 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 63 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 64 | |     pub fn version(&mut self) -> i32 {
[INFO] [stdout] 65 | |         self.inner.version
[INFO] [stdout] 66 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 63 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 64 |     pub fn version(&mut self) -> i32 {
[INFO] [stdout] 65 |         self.inner.version
[INFO] [stdout] 66 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 69 | |     pub fn is_convert(&mut self) -> bool {
[INFO] [stdout] 70 | |         self.inner.is_convert
[INFO] [stdout] 71 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 68 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 69 |     pub fn is_convert(&mut self) -> bool {
[INFO] [stdout] 70 |         self.inner.is_convert
[INFO] [stdout] 71 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:74:5
[INFO] [stdout]    |
[INFO] [stdout] 74 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 75 | |     pub fn stack_leniency(&mut self) -> f32 {
[INFO] [stdout] 76 | |         self.inner.stack_leniency
[INFO] [stdout] 77 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 74 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 75 |     pub fn stack_leniency(&mut self) -> f32 {
[INFO] [stdout] 76 |         self.inner.stack_leniency
[INFO] [stdout] 77 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:79:5
[INFO] [stdout]    |
[INFO] [stdout] 79 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 80 | |     pub fn mode(&mut self) -> Mode {
[INFO] [stdout] 81 | |         self.inner.mode.into()
[INFO] [stdout] 82 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 79 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 80 |     pub fn mode(&mut self) -> Mode {
[INFO] [stdout] 81 |         self.inner.mode.into()
[INFO] [stdout] 82 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 | |     pub fn ar(&mut self) -> f32 {
[INFO] [stdout] 87 | |         self.inner.ar
[INFO] [stdout] 88 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 |     pub fn ar(&mut self) -> f32 {
[INFO] [stdout] 87 |         self.inner.ar
[INFO] [stdout] 88 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 | |     pub fn cs(&mut self) -> f32 {
[INFO] [stdout] 92 | |         self.inner.ar
[INFO] [stdout] 93 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 90 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 |     pub fn cs(&mut self) -> f32 {
[INFO] [stdout] 92 |         self.inner.ar
[INFO] [stdout] 93 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 | |     pub fn hp(&mut self) -> f32 {
[INFO] [stdout] 97 | |         self.inner.ar
[INFO] [stdout] 98 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 95 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 |     pub fn hp(&mut self) -> f32 {
[INFO] [stdout] 97 |         self.inner.ar
[INFO] [stdout] 98 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 | |     pub fn od(&mut self) -> f32 {
[INFO] [stdout] 102 | |         self.inner.ar
[INFO] [stdout] 103 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 100 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 |     pub fn od(&mut self) -> f32 {
[INFO] [stdout] 102 |         self.inner.ar
[INFO] [stdout] 103 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 106 | |     pub fn slider_multiplier(&mut self) -> f64 {
[INFO] [stdout] 107 | |         self.inner.slider_multiplier
[INFO] [stdout] 108 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 105 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 106 |     pub fn slider_multiplier(&mut self) -> f64 {
[INFO] [stdout] 107 |         self.inner.slider_multiplier
[INFO] [stdout] 108 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 111 | |     pub fn slider_tick_rate(&mut self) -> f64 {
[INFO] [stdout] 112 | |         self.inner.slider_tick_rate
[INFO] [stdout] 113 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 110 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 111 |     pub fn slider_tick_rate(&mut self) -> f64 {
[INFO] [stdout] 112 |         self.inner.slider_tick_rate
[INFO] [stdout] 113 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 115 | /     /// Check whether hitobjects appear too suspicious for further calculation.
[INFO] [stdout] 116 | |     ///
[INFO] [stdout] 117 | |     /// Sometimes a [`Beatmap`] isn't created for gameplay but rather to test
[INFO] [stdout] 118 | |     /// the limits of osu! itself. Difficulty- and/or performance calculation
[INFO] [stdout] ...   |
[INFO] [stdout] 123 | |         self.inner.check_suspicion().map_err(Into::into).err().into()
[INFO] [stdout] 124 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 115 ~     unsafe(/// Check whether hitobjects appear too suspicious for further calculation.
[INFO] [stdout] 116 |     ///
[INFO] [stdout] ...
[INFO] [stdout] 123 |         self.inner.check_suspicion().map_err(Into::into).err().into()
[INFO] [stdout] 124 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:23:6
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl Beatmap {
[INFO] [stdout]    |      ^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl unsafe(Beatmap) {
[INFO] [stdout]    |      +++++++       +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | /     #[ffi_service_ctor]
[INFO] [stdout] 39 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 40 | |         Ok(Self::default())
[INFO] [stdout] 41 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 38 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 39 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 40 |         Ok(Self::default())
[INFO] [stdout] 41 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 44 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 45 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 46 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 43 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 44 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 45 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 46 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 50 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 51 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 48 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 50 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 51 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | /     #[ffi_service_method(on_panic = "ffi_error")]
[INFO] [stdout] 54 | |     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 55 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 56 | |             str.as_str()?,
[INFO] [stdout] 57 | |         ));
[INFO] [stdout] 58 | |         Ok(())
[INFO] [stdout] 59 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 53 ~     unsafe(#[ffi_service_method(on_panic = "ffi_error")]
[INFO] [stdout] 54 |     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] ...
[INFO] [stdout] 58 |         Ok(())
[INFO] [stdout] 59 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 62 | |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 63 | |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 64 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 61 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 62 |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 63 |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 64 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 67 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 68 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 69 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 66 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 67 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 68 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 69 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 72 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 73 | |         self.ar = Some(ar);
[INFO] [stdout] 74 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 71 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 72 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 73 |         self.ar = Some(ar);
[INFO] [stdout] 74 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 77 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 78 | |         self.cs = Some(cs);
[INFO] [stdout] 79 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 76 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 77 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 78 |         self.cs = Some(cs);
[INFO] [stdout] 79 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:81:5
[INFO] [stdout]    |
[INFO] [stdout] 81 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 82 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 83 | |         self.hp = Some(hp);
[INFO] [stdout] 84 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 81 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 82 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 83 |         self.hp = Some(hp);
[INFO] [stdout] 84 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 87 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 88 | |         self.od = Some(od);
[INFO] [stdout] 89 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 86 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 87 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 88 |         self.od = Some(od);
[INFO] [stdout] 89 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 92 | |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 93 | |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 94 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 91 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 92 |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 93 |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 94 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:96:5
[INFO] [stdout]    |
[INFO] [stdout] 96 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 97 | |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 98 | |         self.lazer = Some(lazer);
[INFO] [stdout] 99 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 96 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 97 |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 98 |         self.lazer = Some(lazer);
[INFO] [stdout] 99 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/difficulty.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 102 | |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::DifficultyAttributes {
[INFO] [stdout] 103 | |         self.construct().calculate(&beatmap.inner).into()
[INFO] [stdout] 104 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 101 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 102 |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::DifficultyAttributes {
[INFO] [stdout] 103 |         self.construct().calculate(&beatmap.inner).into()
[INFO] [stdout] 104 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/difficulty.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 107 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 108 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 109 | |             return mods.clock_rate().unwrap_or(1.0)
[INFO] [stdout] ...   |
[INFO] [stdout] 116 | |         1.0
[INFO] [stdout] 117 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 106 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 107 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 116 |         1.0
[INFO] [stdout] 117 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:37:6
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl Difficulty {
[INFO] [stdout]    |      ^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl unsafe(Difficulty) {
[INFO] [stdout]    |      +++++++          +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/attributes.rs:108:3
[INFO] [stdout]     |
[INFO] [stdout] 108 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 108 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/attributes.rs:119:3
[INFO] [stdout]     |
[INFO] [stdout] 119 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 119 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | /     #[ffi_service_ctor]
[INFO] [stdout] 19 | |     pub fn from_c_str(str: AsciiPointer<'_>) -> Result<Self, Error> {
[INFO] [stdout] 20 | |         Ok(Self {
[INFO] [stdout] 21 | |             inner: MaybeUninit::new(str.as_c_str().ok_or(Error::Null)?.to_owned()),
[INFO] [stdout] 22 | |             is_init: true
[INFO] [stdout] 23 | |         })
[INFO] [stdout] 24 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 18 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 19 |     pub fn from_c_str(str: AsciiPointer<'_>) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 23 |         })
[INFO] [stdout] 24 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | /     #[ffi_service_ctor]
[INFO] [stdout] 27 | |     pub fn empty() -> Result<Self, Error> {
[INFO] [stdout] 28 | |         Ok(Self {
[INFO] [stdout] 29 | |             inner: MaybeUninit::uninit(),
[INFO] [stdout] 30 | |             is_init: false
[INFO] [stdout] 31 | |         })
[INFO] [stdout] 32 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 26 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 27 |     pub fn empty() -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 31 |         })
[INFO] [stdout] 32 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 | |     pub fn is_init(&self) -> bool {
[INFO] [stdout] 36 | |        self.is_init
[INFO] [stdout] 37 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 34 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 |     pub fn is_init(&self) -> bool {
[INFO] [stdout] 36 |        self.is_init
[INFO] [stdout] 37 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 | |     pub fn to_cstr(&self) -> AsciiPointer<'_> {
[INFO] [stdout] 41 | |         AsciiPointer::from_cstr(unsafe { self.inner.assume_init_ref() })
[INFO] [stdout] 42 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 |     pub fn to_cstr(&self) -> AsciiPointer<'_> {
[INFO] [stdout] 41 |         AsciiPointer::from_cstr(unsafe { self.inner.assume_init_ref() })
[INFO] [stdout] 42 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl OwnedString {
[INFO] [stdout]    |      ^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl unsafe(OwnedString) {
[INFO] [stdout]    |      +++++++           +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 50 | /     #[ffi_service_ctor]
[INFO] [stdout] 51 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 52 | |         Ok(Self::default())
[INFO] [stdout] 53 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 50 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 51 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 52 |         Ok(Self::default())
[INFO] [stdout] 53 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 55 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 56 | |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 57 | |         self.mode = Some(mode);
[INFO] [stdout] 58 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 55 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 56 |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 57 |         self.mode = Some(mode);
[INFO] [stdout] 58 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 61 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 62 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 63 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 60 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 61 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 62 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 63 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 67 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 68 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 65 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 67 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 68 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 | /     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 71 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 72 | |             str.as_str()?,
[INFO] [stdout] 73 | |         ));
[INFO] [stdout] 74 | |         Ok(())
[INFO] [stdout] 75 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 70 ~     unsafe(pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 71 |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] ...
[INFO] [stdout] 74 |         Ok(())
[INFO] [stdout] 75 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 78 | |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 79 | |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 80 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 77 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 78 |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 79 |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 80 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 83 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 84 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 85 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 82 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 83 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 84 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 85 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 88 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 89 | |         self.ar = Some(ar);
[INFO] [stdout] 90 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 87 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 88 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 89 |         self.ar = Some(ar);
[INFO] [stdout] 90 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:92:5
[INFO] [stdout]    |
[INFO] [stdout] 92 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 93 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 94 | |         self.cs = Some(cs);
[INFO] [stdout] 95 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 92 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 93 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 94 |         self.cs = Some(cs);
[INFO] [stdout] 95 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:97:5
[INFO] [stdout]     |
[INFO] [stdout]  97 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  98 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout]  99 | |         self.hp = Some(hp);
[INFO] [stdout] 100 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout]  97 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  98 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout]  99 |         self.hp = Some(hp);
[INFO] [stdout] 100 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 103 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 104 | |         self.od = Some(od);
[INFO] [stdout] 105 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 102 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 103 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 104 |         self.od = Some(od);
[INFO] [stdout] 105 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 | |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 109 | |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 110 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 107 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 109 |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 110 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 | |     pub fn state(&mut self, state: ScoreState) {
[INFO] [stdout] 114 | |         self.state = Some(state);
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 112 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 |     pub fn state(&mut self, state: ScoreState) {
[INFO] [stdout] 114 |         self.state = Some(state);
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn accuracy(&mut self, accuracy: f64) {
[INFO] [stdout] 119 | |         self.accuracy = Some(accuracy);
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn accuracy(&mut self, accuracy: f64) {
[INFO] [stdout] 119 |         self.accuracy = Some(accuracy);
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn misses(&mut self, misses: u32) {
[INFO] [stdout] 124 | |         self.misses = Some(misses);
[INFO] [stdout] 125 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn misses(&mut self, misses: u32) {
[INFO] [stdout] 124 |         self.misses = Some(misses);
[INFO] [stdout] 125 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 | |     pub fn combo(&mut self, combo: u32) {
[INFO] [stdout] 129 | |         self.combo = Some(combo);
[INFO] [stdout] 130 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 127 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 |     pub fn combo(&mut self, combo: u32) {
[INFO] [stdout] 129 |         self.combo = Some(combo);
[INFO] [stdout] 130 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 | |     pub fn hitresult_priority(&mut self, hitresult_priority: HitResultPriority) {
[INFO] [stdout] 134 | |         self.hitresult_priority = Some(hitresult_priority);
[INFO] [stdout] 135 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 132 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 |     pub fn hitresult_priority(&mut self, hitresult_priority: HitResultPriority) {
[INFO] [stdout] 134 |         self.hitresult_priority = Some(hitresult_priority);
[INFO] [stdout] 135 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 | |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 139 | |         self.lazer = Some(lazer);
[INFO] [stdout] 140 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 137 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 139 |         self.lazer = Some(lazer);
[INFO] [stdout] 140 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:142:5
[INFO] [stdout]     |
[INFO] [stdout] 142 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 143 | |     pub fn large_tick_hits(&mut self, large_tick_hits: u32) {
[INFO] [stdout] 144 | |         self.large_tick_hits = Some(large_tick_hits);
[INFO] [stdout] 145 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 142 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 143 |     pub fn large_tick_hits(&mut self, large_tick_hits: u32) {
[INFO] [stdout] 144 |         self.large_tick_hits = Some(large_tick_hits);
[INFO] [stdout] 145 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:147:5
[INFO] [stdout]     |
[INFO] [stdout] 147 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 148 | |     pub fn small_tick_hits(&mut self, small_tick_hits: u32) {
[INFO] [stdout] 149 | |         self.small_tick_hits = Some(small_tick_hits);
[INFO] [stdout] 150 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 147 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 148 |     pub fn small_tick_hits(&mut self, small_tick_hits: u32) {
[INFO] [stdout] 149 |         self.small_tick_hits = Some(small_tick_hits);
[INFO] [stdout] 150 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:152:5
[INFO] [stdout]     |
[INFO] [stdout] 152 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 153 | |     pub fn slider_end_hits(&mut self, slider_end_hits: u32) {
[INFO] [stdout] 154 | |         self.slider_end_hits = Some(slider_end_hits);
[INFO] [stdout] 155 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 152 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 153 |     pub fn slider_end_hits(&mut self, slider_end_hits: u32) {
[INFO] [stdout] 154 |         self.slider_end_hits = Some(slider_end_hits);
[INFO] [stdout] 155 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:157:5
[INFO] [stdout]     |
[INFO] [stdout] 157 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 158 | |     pub fn n300(&mut self, n300: u32) {
[INFO] [stdout] 159 | |         self.n300 = Some(n300);
[INFO] [stdout] 160 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 157 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 158 |     pub fn n300(&mut self, n300: u32) {
[INFO] [stdout] 159 |         self.n300 = Some(n300);
[INFO] [stdout] 160 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:162:5
[INFO] [stdout]     |
[INFO] [stdout] 162 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 163 | |     pub fn n100(&mut self, n100: u32) {
[INFO] [stdout] 164 | |         self.n100 = Some(n100);
[INFO] [stdout] 165 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 162 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 163 |     pub fn n100(&mut self, n100: u32) {
[INFO] [stdout] 164 |         self.n100 = Some(n100);
[INFO] [stdout] 165 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:167:5
[INFO] [stdout]     |
[INFO] [stdout] 167 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 168 | |     pub fn n50(&mut self, n50: u32) {
[INFO] [stdout] 169 | |         self.n50 = Some(n50);
[INFO] [stdout] 170 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 167 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 168 |     pub fn n50(&mut self, n50: u32) {
[INFO] [stdout] 169 |         self.n50 = Some(n50);
[INFO] [stdout] 170 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:172:5
[INFO] [stdout]     |
[INFO] [stdout] 172 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 173 | |     pub fn n_katu(&mut self, n_katu: u32) {
[INFO] [stdout] 174 | |         self.n_katu = Some(n_katu);
[INFO] [stdout] 175 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 172 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 173 |     pub fn n_katu(&mut self, n_katu: u32) {
[INFO] [stdout] 174 |         self.n_katu = Some(n_katu);
[INFO] [stdout] 175 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:177:5
[INFO] [stdout]     |
[INFO] [stdout] 177 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 178 | |     pub fn n_geki(&mut self, n_geki: u32) {
[INFO] [stdout] 179 | |         self.n_geki = Some(n_geki);
[INFO] [stdout] 180 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 177 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 178 |     pub fn n_geki(&mut self, n_geki: u32) {
[INFO] [stdout] 179 |         self.n_geki = Some(n_geki);
[INFO] [stdout] 180 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:182:5
[INFO] [stdout]     |
[INFO] [stdout] 182 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 183 | |     pub fn generate_state(&self, beatmap: &Beatmap) -> state::ScoreState {
[INFO] [stdout] 184 | |         let mut performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 185 | |         performance.generate_state().into()
[INFO] [stdout] 186 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 182 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 183 |     pub fn generate_state(&self, beatmap: &Beatmap) -> state::ScoreState {
[INFO] [stdout] 184 |         let mut performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 185 |         performance.generate_state().into()
[INFO] [stdout] 186 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:188:5
[INFO] [stdout]     |
[INFO] [stdout] 188 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 189 | |     pub fn generate_state_from_difficulty(
[INFO] [stdout] 190 | |         &self,
[INFO] [stdout] 191 | |         difficulty_attr: DifficultyAttributes,
[INFO] [stdout] ...   |
[INFO] [stdout] 196 | |         performance.generate_state().into()
[INFO] [stdout] 197 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 188 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 189 |     pub fn generate_state_from_difficulty(
[INFO] [stdout] ...
[INFO] [stdout] 196 |         performance.generate_state().into()
[INFO] [stdout] 197 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:199:5
[INFO] [stdout]     |
[INFO] [stdout] 199 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 200 | |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::PerformanceAttributes {
[INFO] [stdout] 201 | |         let performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 202 | |         performance.calculate().into()
[INFO] [stdout] 203 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 199 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 200 |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::PerformanceAttributes {
[INFO] [stdout] 201 |         let performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 202 |         performance.calculate().into()
[INFO] [stdout] 203 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:205:5
[INFO] [stdout]     |
[INFO] [stdout] 205 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 206 | |     pub fn calculate_from_difficulty(
[INFO] [stdout] 207 | |         &self,
[INFO] [stdout] 208 | |         difficulty_attr: DifficultyAttributes,
[INFO] [stdout] ...   |
[INFO] [stdout] 213 | |         performance.calculate().into()
[INFO] [stdout] 214 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 205 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 206 |     pub fn calculate_from_difficulty(
[INFO] [stdout] ...
[INFO] [stdout] 213 |         performance.calculate().into()
[INFO] [stdout] 214 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:216:5
[INFO] [stdout]     |
[INFO] [stdout] 216 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 217 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 218 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 219 | |             return mods.clock_rate().unwrap_or(1.0);
[INFO] [stdout] ...   |
[INFO] [stdout] 226 | |         1.0
[INFO] [stdout] 227 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 216 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 217 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 226 |         1.0
[INFO] [stdout] 227 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:49:6
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Performance {
[INFO] [stdout]    |      ^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl unsafe(Performance) {
[INFO] [stdout]    |      +++++++           +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/state.rs:147:3
[INFO] [stdout]     |
[INFO] [stdout] 147 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 147 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/state.rs:154:3
[INFO] [stdout]     |
[INFO] [stdout] 154 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 154 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | /     #[ffi_service_ctor]
[INFO] [stdout] 22 | |     pub fn new(mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 23 | |         Ok(Self {
[INFO] [stdout] 24 | |             mods: rosu_mods::GameMods::new(),
[INFO] [stdout] 25 | |             mode: Some(mode)
[INFO] [stdout] 26 | |         })
[INFO] [stdout] 27 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 21 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 22 |     pub fn new(mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 26 |         })
[INFO] [stdout] 27 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | /     #[ffi_service_ctor]
[INFO] [stdout] 30 | |     pub fn from_acronyms(str: AsciiPointer, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 31 | |         Ok(Self {
[INFO] [stdout] 32 | |             mods: rosu_mods::GameMods::from_intermode(&rosu_mods::GameModsIntermode::from_acronyms(
[INFO] [stdout] ...  |
[INFO] [stdout] 36 | |         })
[INFO] [stdout] 37 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 29 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 30 |     pub fn from_acronyms(str: AsciiPointer, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 36 |         })
[INFO] [stdout] 37 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | /     #[ffi_service_ctor]
[INFO] [stdout] 40 | |     pub fn from_bits(bits: u32, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 41 | |         Ok(Self {
[INFO] [stdout] 42 | |             mods: rosu_mods::GameMods::from_intermode(&rosu_mods::GameModsIntermode::from_bits(bits), mode.into()),
[INFO] [stdout] 43 | |             mode: Some(mode)
[INFO] [stdout] 44 | |         })
[INFO] [stdout] 45 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 40 |     pub fn from_bits(bits: u32, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 44 |         })
[INFO] [stdout] 45 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | /     #[ffi_service_ctor]
[INFO] [stdout] 49 | |     pub fn from_json(str: AsciiPointer, mode: Mode, deny_unknown_fields: bool) -> Result<Self, Error> {
[INFO] [stdout] 50 | |         let s = str.as_str()?;
[INFO] [stdout] 51 | |         let mut d = serde_json::Deserializer::from_str(s);
[INFO] [stdout] ...  |
[INFO] [stdout] 56 | |         })
[INFO] [stdout] 57 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 48 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 49 |     pub fn from_json(str: AsciiPointer, mode: Mode, deny_unknown_fields: bool) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 56 |         })
[INFO] [stdout] 57 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 60 | |     pub fn remove_unknown_mods(&mut self) {
[INFO] [stdout] 61 | |         self.mods = self.mods.clone().into_iter().filter(|m| m.kind() != UnknownMod::kind()).collect();
[INFO] [stdout] 62 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 59 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 60 |     pub fn remove_unknown_mods(&mut self) {
[INFO] [stdout] 61 |         self.mods = self.mods.clone().into_iter().filter(|m| m.kind() != UnknownMod::kind()).collect();
[INFO] [stdout] 62 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 | |     pub fn sanitize(&mut self) {
[INFO] [stdout] 67 | |         self.mods.sanitize();
[INFO] [stdout] 68 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 65 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 |     pub fn sanitize(&mut self) {
[INFO] [stdout] 67 |         self.mods.sanitize();
[INFO] [stdout] 68 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 71 | |     pub fn bits(&mut self) -> u32 {
[INFO] [stdout] 72 | |         self.mods.bits()
[INFO] [stdout] 73 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 70 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 71 |     pub fn bits(&mut self) -> u32 {
[INFO] [stdout] 72 |         self.mods.bits()
[INFO] [stdout] 73 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 76 | |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 77 | |         self.mods.len() as u32
[INFO] [stdout] 78 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 75 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 76 |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 77 |         self.mods.len() as u32
[INFO] [stdout] 78 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:80:5
[INFO] [stdout]    |
[INFO] [stdout] 80 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 81 | |     pub fn json(&mut self, str: &mut OwnedString) {
[INFO] [stdout] 82 | |         str.replace(serde_json::to_string_pretty(&self.mods).unwrap())
[INFO] [stdout] 83 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 80 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 81 |     pub fn json(&mut self, str: &mut OwnedString) {
[INFO] [stdout] 82 |         str.replace(serde_json::to_string_pretty(&self.mods).unwrap())
[INFO] [stdout] 83 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 | |     pub fn insert_json(&mut self, str: AsciiPointer, deny_unknown_fields: bool) -> bool {
[INFO] [stdout] 87 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 88 | |             let mut d = serde_json::Deserializer::from_str(s);
[INFO] [stdout] ...  |
[INFO] [stdout] 95 | |         false
[INFO] [stdout] 96 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 |     pub fn insert_json(&mut self, str: AsciiPointer, deny_unknown_fields: bool) -> bool {
[INFO] [stdout] ...
[INFO] [stdout] 95 |         false
[INFO] [stdout] 96 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:98:5
[INFO] [stdout]     |
[INFO] [stdout]  98 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 | |     pub fn insert(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] 100 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 101 | |             self.mods.insert(GameMod::new(s, self.mode.unwrap_or_default().into()));
[INFO] [stdout] ...   |
[INFO] [stdout] 104 | |         false
[INFO] [stdout] 105 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout]  98 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 |     pub fn insert(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] ...
[INFO] [stdout] 104 |         false
[INFO] [stdout] 105 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 | |     pub fn contains(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] 109 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 110 | |             if let Ok(m) = s.parse::<Acronym>(){
[INFO] [stdout] ...   |
[INFO] [stdout] 114 | |         false
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 107 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 |     pub fn contains(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] ...
[INFO] [stdout] 114 |         false
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn clear(&mut self) {
[INFO] [stdout] 119 | |         self.mods = rosu_mods::GameMods::new();
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn clear(&mut self) {
[INFO] [stdout] 119 |         self.mods = rosu_mods::GameMods::new();
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn clock_rate(&mut self) -> FFIOption<f64> {
[INFO] [stdout] 124 | |         self.mods.clock_rate().into()
[INFO] [stdout] 125 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn clock_rate(&mut self) -> FFIOption<f64> {
[INFO] [stdout] 124 |         self.mods.clock_rate().into()
[INFO] [stdout] 125 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:20:6
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl Mods {
[INFO] [stdout]    |      ^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl unsafe(Mods) {
[INFO] [stdout]    |      +++++++    +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | /     /// Create a [`GradualDifficulty`] for a map of any mode.
[INFO] [stdout] 23 | |     #[ffi_service_ctor]
[INFO] [stdout] 24 | |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 25 | |         Ok(Self { inner: rosu_pp::GradualDifficulty::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 26 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 22 ~     unsafe(/// Create a [`GradualDifficulty`] for a map of any mode.
[INFO] [stdout] 23 |     #[ffi_service_ctor]
[INFO] [stdout] 24 |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 25 |         Ok(Self { inner: rosu_pp::GradualDifficulty::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 26 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | /     /// Create a [`GradualDifficulty`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 29 | |     #[ffi_service_ctor]
[INFO] [stdout] 30 | |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 31 | |         Ok(Self { inner: rosu_pp::GradualDifficulty::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 32 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 28 ~     unsafe(/// Create a [`GradualDifficulty`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 29 |     #[ffi_service_ctor]
[INFO] [stdout] 30 |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 31 |         Ok(Self { inner: rosu_pp::GradualDifficulty::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 32 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 | |     pub fn next(&mut self) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 36 | |         self.inner.next().map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 37 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 34 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 |     pub fn next(&mut self) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 36 |         self.inner.next().map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 37 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 | |     pub fn nth(&mut self, n: u32) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 41 | |         self.inner.nth(n as usize).map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 42 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 |     pub fn nth(&mut self, n: u32) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 41 |         self.inner.nth(n as usize).map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 42 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 45 | |     pub fn len(&self) -> u32 {
[INFO] [stdout] 46 | |         self.inner.len() as u32
[INFO] [stdout] 47 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 44 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 45 |     pub fn len(&self) -> u32 {
[INFO] [stdout] 46 |         self.inner.len() as u32
[INFO] [stdout] 47 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:21:6
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl GradualDifficulty {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl unsafe(GradualDifficulty) {
[INFO] [stdout]    |      +++++++                 +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 | /     /// Create a [`GradualPerformance`] for a map of any mode.
[INFO] [stdout] 62 | |     #[ffi_service_ctor]
[INFO] [stdout] 63 | |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 64 | |         Ok(Self { inner: rosu_pp::GradualPerformance::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 65 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 61 ~     unsafe(/// Create a [`GradualPerformance`] for a map of any mode.
[INFO] [stdout] 62 |     #[ffi_service_ctor]
[INFO] [stdout] 63 |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 64 |         Ok(Self { inner: rosu_pp::GradualPerformance::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 65 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | /     /// Create a [`GradualPerformance`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 68 | |     #[ffi_service_ctor]
[INFO] [stdout] 69 | |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 70 | |         Ok(Self { inner: rosu_pp::GradualPerformance::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 71 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 67 ~     unsafe(/// Create a [`GradualPerformance`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 68 |     #[ffi_service_ctor]
[INFO] [stdout] 69 |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 70 |         Ok(Self { inner: rosu_pp::GradualPerformance::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 71 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 | /     /// Process the next hit object and calculate the performance attributes
[INFO] [stdout] 74 | |     /// for the resulting score state.
[INFO] [stdout] 75 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 76 | |     pub fn next(&mut self, state: ScoreState) -> FFIOption<attributes::PerformanceAttributes> {
[INFO] [stdout] 77 | |         self.inner.next(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 78 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 73 ~     unsafe(/// Process the next hit object and calculate the performance attributes
[INFO] [stdout] 74 |     /// for the resulting score state.
[INFO] [stdout] ...
[INFO] [stdout] 77 |         self.inner.next(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 78 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:80:5
[INFO] [stdout]    |
[INFO] [stdout] 80 | /     /// Process all remaining hit objects and calculate the final performance
[INFO] [stdout] 81 | |     /// attributes.
[INFO] [stdout] 82 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 83 | |     pub fn last(&mut self, state: ScoreState) -> FFIOption<attributes::PerformanceAttributes> {
[INFO] [stdout] 84 | |         self.inner.last(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 85 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 80 ~     unsafe(/// Process all remaining hit objects and calculate the final performance
[INFO] [stdout] 81 |     /// attributes.
[INFO] [stdout] ...
[INFO] [stdout] 84 |         self.inner.last(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 85 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 | /     /// Process everything up to the next `n`th hitobject and calculate the
[INFO] [stdout] 88 | |     /// performance attributes for the resulting score state.
[INFO] [stdout] 89 | |     ///
[INFO] [stdout] 90 | |     /// Note that the count is zero-indexed, so `n=0` will process 1 object,
[INFO] [stdout] ...  |
[INFO] [stdout] 94 | |         self.inner.nth(state.into(), n as usize).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 95 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 87 ~     unsafe(/// Process everything up to the next `n`th hitobject and calculate the
[INFO] [stdout] 88 |     /// performance attributes for the resulting score state.
[INFO] [stdout] ...
[INFO] [stdout] 94 |         self.inner.nth(state.into(), n as usize).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 95 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/gradual.rs:97:5
[INFO] [stdout]     |
[INFO] [stdout]  97 | /     /// Returns the amount of remaining objects.
[INFO] [stdout]  98 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 | |     pub fn len(&self) -> u32 {
[INFO] [stdout] 100 | |         self.inner.len() as u32
[INFO] [stdout] 101 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout]  97 ~     unsafe(/// Returns the amount of remaining objects.
[INFO] [stdout]  98 |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 |     pub fn len(&self) -> u32 {
[INFO] [stdout] 100 |         self.inner.len() as u32
[INFO] [stdout] 101 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:60:6
[INFO] [stdout]    |
[INFO] [stdout] 60 | impl GradualPerformance {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 60 | impl unsafe(GradualPerformance) {
[INFO] [stdout]    |      +++++++                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/lib.rs:26:3
[INFO] [stdout]    |
[INFO] [stdout] 26 | #[no_mangle]
[INFO] [stdout]    |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 26 | #[unsafe(no_mangle)]
[INFO] [stdout]    |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `core::slice::<impl [T]>::get_unchecked` is unsafe and requires unsafe block
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:157:9
[INFO] [stdout]     |
[INFO] [stdout] 157 |         self.inner.get_unchecked(index as usize).into()
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:156:5
[INFO] [stdout]     |
[INFO] [stdout] 156 |     unsafe fn get_unchecked(&mut self, index: u32) -> HitObject {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout]     = note: `--force-warn unsafe-op-in-unsafe-fn` implied by `--force-warn rust-2024-compatibility`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0133`.
[INFO] [stdout] 
[INFO] [stderr] error: errors present after applying fixes to crate `rosu_pp_ffi`
[INFO] [stderr]  --> rosu_pp_ffi/src/attributes.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/beatmap/mod.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/difficulty.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/gradual.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/lib.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/mods.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/owned_string.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/performance.rs
[INFO] [stderr]  ::: rosu_pp_ffi/src/state.rs
[INFO] [stderr]   = cause: error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/beatmap/mod.rs:23:6
[INFO] [stderr]               |
[INFO] [stderr]            23 | impl unsafe(Beatmap) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/difficulty.rs:37:6
[INFO] [stderr]               |
[INFO] [stderr]            37 | impl unsafe(Difficulty) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/owned_string.rs:17:6
[INFO] [stderr]               |
[INFO] [stderr]            17 | impl unsafe(OwnedString) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/performance.rs:49:6
[INFO] [stderr]               |
[INFO] [stderr]            49 | impl unsafe(Performance) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/mods.rs:20:6
[INFO] [stderr]               |
[INFO] [stderr]            20 | impl unsafe(Mods) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: expected type, found keyword `unsafe`
[INFO] [stderr]              --> rosu_pp_ffi/src/gradual.rs:21:6
[INFO] [stderr]               |
[INFO] [stderr]            21 | impl unsafe(GradualDifficulty) {
[INFO] [stderr]               |      ^^^^^^ expected type
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/attributes.rs:107:1
[INFO] [stderr]                |
[INFO] [stderr]            107 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/attributes.rs:118:1
[INFO] [stderr]                |
[INFO] [stderr]            118 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/state.rs:146:1
[INFO] [stderr]                |
[INFO] [stderr]            146 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]               --> rosu_pp_ffi/src/state.rs:153:1
[INFO] [stderr]                |
[INFO] [stderr]            153 | #[ffi_function]
[INFO] [stderr]                | ^^^^^^^^^^^^^^^
[INFO] [stderr]                |
[INFO] [stderr]                = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: custom attribute panicked
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:25:1
[INFO] [stderr]               |
[INFO] [stderr]            25 | #[ffi_function]
[INFO] [stderr]               | ^^^^^^^^^^^^^^^
[INFO] [stderr]               |
[INFO] [stderr]               = help: message: Must be item.: Error("expected path")
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `debug_difficylty_attributes` in module `attributes`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:59:41
[INFO] [stderr]               |
[INFO] [stderr]            59 |         .register(function!(attributes::debug_difficylty_attributes))
[INFO] [stderr]               |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^ not found in `attributes`
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `debug_performance_attributes` in module `attributes`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:60:41
[INFO] [stderr]               |
[INFO] [stderr]            60 |         .register(function!(attributes::debug_performance_attributes))
[INFO] [stderr]               |                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]               |
[INFO] [stderr]              ::: rosu_pp_ffi/src/attributes.rs:60:1
[INFO] [stderr]               |
[INFO] [stderr]            60 | pub struct PerformanceAttributes {
[INFO] [stderr]               | -------------------------------- similarly named struct `PerformanceAttributes` defined here
[INFO] [stderr]               |
[INFO] [stderr]            help: a struct with a similar name exists
[INFO] [stderr]               |
[INFO] [stderr]            60 -         .register(function!(attributes::debug_performance_attributes))
[INFO] [stderr]            60 +         .register(function!(attributes::PerformanceAttributes))
[INFO] [stderr]               |
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `debug_score_state` in module `state`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:61:36
[INFO] [stderr]               |
[INFO] [stderr]            61 |         .register(function!(state::debug_score_state))
[INFO] [stderr]               |                                    ^^^^^^^^^^^^^^^^^ not found in `state`
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error[E0425]: cannot find type `calculate_accuacy` in module `state`
[INFO] [stderr]              --> rosu_pp_ffi/src/lib.rs:62:36
[INFO] [stderr]               |
[INFO] [stderr]            62 |         .register(function!(state::calculate_accuacy))
[INFO] [stderr]               |                                    ^^^^^^^^^^^^^^^^^ not found in `state`
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            error: aborting due to 15 previous errors
[INFO] [stderr]            
[INFO] [stderr]            
[INFO] [stderr]            For more information about this error, try `rustc --explain E0425`.
[INFO] [stderr] help: to report this as a bug, open an issue at https://github.com/rust-lang/rust/issues, quoting the full output of this command
[INFO] [stderr] help: to possibly apply more fixes, pass in the `--broken-code` flag
[INFO] [stderr] note: original diagnostics will follow:
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_ctor]
[INFO] [stdout] 86 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 87 | |         Ok(Self::default())
[INFO] [stdout] 88 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout]    = note: `--force-warn unsafe-attr-outside-unsafe` implied by `--force-warn rust-2024-compatibility`
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 86 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 87 |         Ok(Self::default())
[INFO] [stdout] 88 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 | |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 92 | |         self.mode = Some(mode);
[INFO] [stdout] 93 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 90 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 92 |         self.mode = Some(mode);
[INFO] [stdout] 93 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 97 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 98 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 95 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 97 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 98 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 102 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 103 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 100 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 102 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 103 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 | /     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 106 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 107 | |             str.as_str()?,
[INFO] [stdout] 108 | |         ));
[INFO] [stdout] 109 | |         Ok(())
[INFO] [stdout] 110 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 105 ~     unsafe(pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 106 |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] ...
[INFO] [stdout] 109 |         Ok(())
[INFO] [stdout] 110 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 114 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 112 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 114 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 119 | |         self.ar = Some(ar);
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 119 |         self.ar = Some(ar);
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 124 | |         self.cs = Some(cs);
[INFO] [stdout] 125 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 124 |         self.cs = Some(cs);
[INFO] [stdout] 125 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 129 | |         self.hp = Some(hp);
[INFO] [stdout] 130 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 127 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 129 |         self.hp = Some(hp);
[INFO] [stdout] 130 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 134 | |         self.od = Some(od);
[INFO] [stdout] 135 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 132 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 134 |         self.od = Some(od);
[INFO] [stdout] 135 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 139 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 140 | |             return mods.clock_rate().unwrap_or(1.0)
[INFO] [stdout] ...   |
[INFO] [stdout] 147 | |         1.0
[INFO] [stdout] 148 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 137 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 147 |         1.0
[INFO] [stdout] 148 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:150:5
[INFO] [stdout]     |
[INFO] [stdout] 150 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 151 | |     pub fn build(&self, beatmap: *const Beatmap) -> BeatmapAttributes {
[INFO] [stdout] 152 | |         let beatmap = unsafe {
[INFO] [stdout] 153 | |             beatmap
[INFO] [stdout] ...   |
[INFO] [stdout] 200 | |         builder.build().into()
[INFO] [stdout] 201 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 150 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 151 |     pub fn build(&self, beatmap: *const Beatmap) -> BeatmapAttributes {
[INFO] [stdout] ...
[INFO] [stdout] 200 |         builder.build().into()
[INFO] [stdout] 201 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:84:6
[INFO] [stdout]    |
[INFO] [stdout] 84 | impl BeatmapAttributesBuilder {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 84 | impl unsafe(BeatmapAttributesBuilder) {
[INFO] [stdout]    |      +++++++                        +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 | /     #[ffi_service_ctor]
[INFO] [stdout] 109 | |     pub fn new(beatmap: &'a Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 110 | |         Ok(Self {
[INFO] [stdout] 111 | |             inner: &beatmap.inner.hit_objects,
[INFO] [stdout] ...   |
[INFO] [stdout] 114 | |         })
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 108 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 109 |     pub fn new(beatmap: &'a Beatmap) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 114 |         })
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 119 | |         self.len
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 119 |         self.len
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn get(&mut self, index: u32) -> FFIOption<HitObject> {
[INFO] [stdout] 124 | |         if index < self.len {
[INFO] [stdout] 125 | |             FFIOption::some(unsafe { self.get_unchecked(index) })
[INFO] [stdout] ...   |
[INFO] [stdout] 129 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn get(&mut self, index: u32) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 128 |         }
[INFO] [stdout] 129 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 132 | |     pub fn next(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] 133 | |         if self.index < self.len {
[INFO] [stdout] 134 | |             self.index += 1;
[INFO] [stdout] ...   |
[INFO] [stdout] 139 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 131 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 132 |     pub fn next(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 138 |         }
[INFO] [stdout] 139 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:141:5
[INFO] [stdout]     |
[INFO] [stdout] 141 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 142 | |     pub fn prev(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] 143 | |         if self.index > 0 {
[INFO] [stdout] 144 | |             self.index -= 1;
[INFO] [stdout] ...   |
[INFO] [stdout] 149 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 141 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 142 |     pub fn prev(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 148 |         }
[INFO] [stdout] 149 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:151:5
[INFO] [stdout]     |
[INFO] [stdout] 151 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 152 | |     pub fn reset(&mut self) {
[INFO] [stdout] 153 | |         self.index = 0;
[INFO] [stdout] 154 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 151 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 152 |     pub fn reset(&mut self) {
[INFO] [stdout] 153 |         self.index = 0;
[INFO] [stdout] 154 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:107:10
[INFO] [stdout]     |
[INFO] [stdout] 107 | impl<'a> HitObjects<'a> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 107 | impl<'a> unsafe(HitObjects<'a>) {
[INFO] [stdout]     |          +++++++              +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | /     #[ffi_service_ctor]
[INFO] [stdout] 25 | |     pub fn from_bytes(data: FFISlice<u8>) -> Result<Self, Error> {
[INFO] [stdout] 26 | |         Ok(Self {
[INFO] [stdout] 27 | |             inner: rosu_pp::Beatmap::from_bytes(data.as_slice())?,
[INFO] [stdout] 28 | |         })
[INFO] [stdout] 29 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 24 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 25 |     pub fn from_bytes(data: FFISlice<u8>) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 28 |         })
[INFO] [stdout] 29 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | /     #[ffi_service_ctor]
[INFO] [stdout] 32 | |     pub fn from_path(path: AsciiPointer) -> Result<Self, Error> {
[INFO] [stdout] 33 | |         Ok(Self {
[INFO] [stdout] 34 | |             inner: rosu_pp::Beatmap::from_path(
[INFO] [stdout] ...  |
[INFO] [stdout] 37 | |         })
[INFO] [stdout] 38 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 31 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 32 |     pub fn from_path(path: AsciiPointer) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 37 |         })
[INFO] [stdout] 38 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 | /     #[ffi_service_ctor]
[INFO] [stdout] 41 | |     pub fn from_clone(beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 42 | |         Ok(Self {
[INFO] [stdout] 43 | |             inner: beatmap.inner.clone(),
[INFO] [stdout] 44 | |         })
[INFO] [stdout] 45 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 40 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 41 |     pub fn from_clone(beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 44 |         })
[INFO] [stdout] 45 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 | /     /// Convert a Beatmap to the specified mode
[INFO] [stdout] 48 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 | |     pub fn convert(&mut self, mode: Mode, mods: &Mods) -> bool {
[INFO] [stdout] 50 | |         self.inner.convert_mut(mode.into(), &GameMods::from(mods.mods.clone())).is_ok()
[INFO] [stdout] 51 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 47 ~     unsafe(/// Convert a Beatmap to the specified mode
[INFO] [stdout] 48 |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 |     pub fn convert(&mut self, mode: Mode, mods: &Mods) -> bool {
[INFO] [stdout] 50 |         self.inner.convert_mut(mode.into(), &GameMods::from(mods.mods.clone())).is_ok()
[INFO] [stdout] 51 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 54 | |     pub fn bpm(&mut self) -> f64 {
[INFO] [stdout] 55 | |         self.inner.bpm()
[INFO] [stdout] 56 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 53 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 54 |     pub fn bpm(&mut self) -> f64 {
[INFO] [stdout] 55 |         self.inner.bpm()
[INFO] [stdout] 56 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:58:5
[INFO] [stdout]    |
[INFO] [stdout] 58 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 59 | |     pub fn total_break_time(&mut self) -> f64 {
[INFO] [stdout] 60 | |         self.inner.total_break_time()
[INFO] [stdout] 61 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 58 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 59 |     pub fn total_break_time(&mut self) -> f64 {
[INFO] [stdout] 60 |         self.inner.total_break_time()
[INFO] [stdout] 61 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 63 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 64 | |     pub fn version(&mut self) -> i32 {
[INFO] [stdout] 65 | |         self.inner.version
[INFO] [stdout] 66 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 63 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 64 |     pub fn version(&mut self) -> i32 {
[INFO] [stdout] 65 |         self.inner.version
[INFO] [stdout] 66 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 69 | |     pub fn is_convert(&mut self) -> bool {
[INFO] [stdout] 70 | |         self.inner.is_convert
[INFO] [stdout] 71 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 68 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 69 |     pub fn is_convert(&mut self) -> bool {
[INFO] [stdout] 70 |         self.inner.is_convert
[INFO] [stdout] 71 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:74:5
[INFO] [stdout]    |
[INFO] [stdout] 74 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 75 | |     pub fn stack_leniency(&mut self) -> f32 {
[INFO] [stdout] 76 | |         self.inner.stack_leniency
[INFO] [stdout] 77 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 74 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 75 |     pub fn stack_leniency(&mut self) -> f32 {
[INFO] [stdout] 76 |         self.inner.stack_leniency
[INFO] [stdout] 77 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:79:5
[INFO] [stdout]    |
[INFO] [stdout] 79 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 80 | |     pub fn mode(&mut self) -> Mode {
[INFO] [stdout] 81 | |         self.inner.mode.into()
[INFO] [stdout] 82 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 79 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 80 |     pub fn mode(&mut self) -> Mode {
[INFO] [stdout] 81 |         self.inner.mode.into()
[INFO] [stdout] 82 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 | |     pub fn ar(&mut self) -> f32 {
[INFO] [stdout] 87 | |         self.inner.ar
[INFO] [stdout] 88 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 |     pub fn ar(&mut self) -> f32 {
[INFO] [stdout] 87 |         self.inner.ar
[INFO] [stdout] 88 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 | |     pub fn cs(&mut self) -> f32 {
[INFO] [stdout] 92 | |         self.inner.ar
[INFO] [stdout] 93 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 90 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 |     pub fn cs(&mut self) -> f32 {
[INFO] [stdout] 92 |         self.inner.ar
[INFO] [stdout] 93 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 | |     pub fn hp(&mut self) -> f32 {
[INFO] [stdout] 97 | |         self.inner.ar
[INFO] [stdout] 98 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 95 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 |     pub fn hp(&mut self) -> f32 {
[INFO] [stdout] 97 |         self.inner.ar
[INFO] [stdout] 98 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 | |     pub fn od(&mut self) -> f32 {
[INFO] [stdout] 102 | |         self.inner.ar
[INFO] [stdout] 103 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 100 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 |     pub fn od(&mut self) -> f32 {
[INFO] [stdout] 102 |         self.inner.ar
[INFO] [stdout] 103 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 106 | |     pub fn slider_multiplier(&mut self) -> f64 {
[INFO] [stdout] 107 | |         self.inner.slider_multiplier
[INFO] [stdout] 108 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 105 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 106 |     pub fn slider_multiplier(&mut self) -> f64 {
[INFO] [stdout] 107 |         self.inner.slider_multiplier
[INFO] [stdout] 108 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 111 | |     pub fn slider_tick_rate(&mut self) -> f64 {
[INFO] [stdout] 112 | |         self.inner.slider_tick_rate
[INFO] [stdout] 113 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 110 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 111 |     pub fn slider_tick_rate(&mut self) -> f64 {
[INFO] [stdout] 112 |         self.inner.slider_tick_rate
[INFO] [stdout] 113 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 115 | /     /// Check whether hitobjects appear too suspicious for further calculation.
[INFO] [stdout] 116 | |     ///
[INFO] [stdout] 117 | |     /// Sometimes a [`Beatmap`] isn't created for gameplay but rather to test
[INFO] [stdout] 118 | |     /// the limits of osu! itself. Difficulty- and/or performance calculation
[INFO] [stdout] ...   |
[INFO] [stdout] 123 | |         self.inner.check_suspicion().map_err(Into::into).err().into()
[INFO] [stdout] 124 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 115 ~     unsafe(/// Check whether hitobjects appear too suspicious for further calculation.
[INFO] [stdout] 116 |     ///
[INFO] [stdout] ...
[INFO] [stdout] 123 |         self.inner.check_suspicion().map_err(Into::into).err().into()
[INFO] [stdout] 124 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:23:6
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl Beatmap {
[INFO] [stdout]    |      ^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl unsafe(Beatmap) {
[INFO] [stdout]    |      +++++++       +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | /     #[ffi_service_ctor]
[INFO] [stdout] 39 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 40 | |         Ok(Self::default())
[INFO] [stdout] 41 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 38 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 39 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 40 |         Ok(Self::default())
[INFO] [stdout] 41 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 44 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 45 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 46 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 43 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 44 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 45 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 46 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 50 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 51 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 48 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 50 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 51 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | /     #[ffi_service_method(on_panic = "ffi_error")]
[INFO] [stdout] 54 | |     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 55 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 56 | |             str.as_str()?,
[INFO] [stdout] 57 | |         ));
[INFO] [stdout] 58 | |         Ok(())
[INFO] [stdout] 59 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 53 ~     unsafe(#[ffi_service_method(on_panic = "ffi_error")]
[INFO] [stdout] 54 |     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] ...
[INFO] [stdout] 58 |         Ok(())
[INFO] [stdout] 59 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 62 | |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 63 | |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 64 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 61 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 62 |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 63 |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 64 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 67 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 68 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 69 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 66 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 67 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 68 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 69 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 72 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 73 | |         self.ar = Some(ar);
[INFO] [stdout] 74 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 71 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 72 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 73 |         self.ar = Some(ar);
[INFO] [stdout] 74 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 77 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 78 | |         self.cs = Some(cs);
[INFO] [stdout] 79 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 76 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 77 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 78 |         self.cs = Some(cs);
[INFO] [stdout] 79 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:81:5
[INFO] [stdout]    |
[INFO] [stdout] 81 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 82 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 83 | |         self.hp = Some(hp);
[INFO] [stdout] 84 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 81 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 82 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 83 |         self.hp = Some(hp);
[INFO] [stdout] 84 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 87 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 88 | |         self.od = Some(od);
[INFO] [stdout] 89 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 86 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 87 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 88 |         self.od = Some(od);
[INFO] [stdout] 89 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 92 | |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 93 | |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 94 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 91 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 92 |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 93 |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 94 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:96:5
[INFO] [stdout]    |
[INFO] [stdout] 96 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 97 | |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 98 | |         self.lazer = Some(lazer);
[INFO] [stdout] 99 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 96 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 97 |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 98 |         self.lazer = Some(lazer);
[INFO] [stdout] 99 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/difficulty.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 102 | |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::DifficultyAttributes {
[INFO] [stdout] 103 | |         self.construct().calculate(&beatmap.inner).into()
[INFO] [stdout] 104 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 101 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 102 |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::DifficultyAttributes {
[INFO] [stdout] 103 |         self.construct().calculate(&beatmap.inner).into()
[INFO] [stdout] 104 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/difficulty.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 107 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 108 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 109 | |             return mods.clock_rate().unwrap_or(1.0)
[INFO] [stdout] ...   |
[INFO] [stdout] 116 | |         1.0
[INFO] [stdout] 117 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 106 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 107 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 116 |         1.0
[INFO] [stdout] 117 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:37:6
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl Difficulty {
[INFO] [stdout]    |      ^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl unsafe(Difficulty) {
[INFO] [stdout]    |      +++++++          +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/attributes.rs:108:3
[INFO] [stdout]     |
[INFO] [stdout] 108 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 108 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/attributes.rs:119:3
[INFO] [stdout]     |
[INFO] [stdout] 119 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 119 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | /     #[ffi_service_ctor]
[INFO] [stdout] 19 | |     pub fn from_c_str(str: AsciiPointer<'_>) -> Result<Self, Error> {
[INFO] [stdout] 20 | |         Ok(Self {
[INFO] [stdout] 21 | |             inner: MaybeUninit::new(str.as_c_str().ok_or(Error::Null)?.to_owned()),
[INFO] [stdout] 22 | |             is_init: true
[INFO] [stdout] 23 | |         })
[INFO] [stdout] 24 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 18 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 19 |     pub fn from_c_str(str: AsciiPointer<'_>) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 23 |         })
[INFO] [stdout] 24 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | /     #[ffi_service_ctor]
[INFO] [stdout] 27 | |     pub fn empty() -> Result<Self, Error> {
[INFO] [stdout] 28 | |         Ok(Self {
[INFO] [stdout] 29 | |             inner: MaybeUninit::uninit(),
[INFO] [stdout] 30 | |             is_init: false
[INFO] [stdout] 31 | |         })
[INFO] [stdout] 32 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 26 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 27 |     pub fn empty() -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 31 |         })
[INFO] [stdout] 32 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 | |     pub fn is_init(&self) -> bool {
[INFO] [stdout] 36 | |        self.is_init
[INFO] [stdout] 37 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 34 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 |     pub fn is_init(&self) -> bool {
[INFO] [stdout] 36 |        self.is_init
[INFO] [stdout] 37 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 | |     pub fn to_cstr(&self) -> AsciiPointer<'_> {
[INFO] [stdout] 41 | |         AsciiPointer::from_cstr(unsafe { self.inner.assume_init_ref() })
[INFO] [stdout] 42 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 |     pub fn to_cstr(&self) -> AsciiPointer<'_> {
[INFO] [stdout] 41 |         AsciiPointer::from_cstr(unsafe { self.inner.assume_init_ref() })
[INFO] [stdout] 42 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl OwnedString {
[INFO] [stdout]    |      ^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl unsafe(OwnedString) {
[INFO] [stdout]    |      +++++++           +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 50 | /     #[ffi_service_ctor]
[INFO] [stdout] 51 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 52 | |         Ok(Self::default())
[INFO] [stdout] 53 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 50 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 51 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 52 |         Ok(Self::default())
[INFO] [stdout] 53 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 55 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 56 | |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 57 | |         self.mode = Some(mode);
[INFO] [stdout] 58 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 55 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 56 |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 57 |         self.mode = Some(mode);
[INFO] [stdout] 58 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 61 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 62 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 63 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 60 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 61 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 62 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 63 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 67 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 68 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 65 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 67 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 68 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 | /     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 71 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 72 | |             str.as_str()?,
[INFO] [stdout] 73 | |         ));
[INFO] [stdout] 74 | |         Ok(())
[INFO] [stdout] 75 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 70 ~     unsafe(pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 71 |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] ...
[INFO] [stdout] 74 |         Ok(())
[INFO] [stdout] 75 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 78 | |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 79 | |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 80 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 77 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 78 |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 79 |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 80 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 83 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 84 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 85 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 82 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 83 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 84 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 85 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 88 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 89 | |         self.ar = Some(ar);
[INFO] [stdout] 90 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 87 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 88 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 89 |         self.ar = Some(ar);
[INFO] [stdout] 90 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:92:5
[INFO] [stdout]    |
[INFO] [stdout] 92 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 93 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 94 | |         self.cs = Some(cs);
[INFO] [stdout] 95 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 92 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 93 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 94 |         self.cs = Some(cs);
[INFO] [stdout] 95 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:97:5
[INFO] [stdout]     |
[INFO] [stdout]  97 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  98 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout]  99 | |         self.hp = Some(hp);
[INFO] [stdout] 100 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout]  97 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  98 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout]  99 |         self.hp = Some(hp);
[INFO] [stdout] 100 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 103 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 104 | |         self.od = Some(od);
[INFO] [stdout] 105 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 102 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 103 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 104 |         self.od = Some(od);
[INFO] [stdout] 105 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 | |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 109 | |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 110 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 107 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 109 |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 110 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 | |     pub fn state(&mut self, state: ScoreState) {
[INFO] [stdout] 114 | |         self.state = Some(state);
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 112 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 |     pub fn state(&mut self, state: ScoreState) {
[INFO] [stdout] 114 |         self.state = Some(state);
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn accuracy(&mut self, accuracy: f64) {
[INFO] [stdout] 119 | |         self.accuracy = Some(accuracy);
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn accuracy(&mut self, accuracy: f64) {
[INFO] [stdout] 119 |         self.accuracy = Some(accuracy);
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn misses(&mut self, misses: u32) {
[INFO] [stdout] 124 | |         self.misses = Some(misses);
[INFO] [stdout] 125 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn misses(&mut self, misses: u32) {
[INFO] [stdout] 124 |         self.misses = Some(misses);
[INFO] [stdout] 125 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 | |     pub fn combo(&mut self, combo: u32) {
[INFO] [stdout] 129 | |         self.combo = Some(combo);
[INFO] [stdout] 130 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 127 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 |     pub fn combo(&mut self, combo: u32) {
[INFO] [stdout] 129 |         self.combo = Some(combo);
[INFO] [stdout] 130 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 | |     pub fn hitresult_priority(&mut self, hitresult_priority: HitResultPriority) {
[INFO] [stdout] 134 | |         self.hitresult_priority = Some(hitresult_priority);
[INFO] [stdout] 135 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 132 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 |     pub fn hitresult_priority(&mut self, hitresult_priority: HitResultPriority) {
[INFO] [stdout] 134 |         self.hitresult_priority = Some(hitresult_priority);
[INFO] [stdout] 135 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 | |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 139 | |         self.lazer = Some(lazer);
[INFO] [stdout] 140 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 137 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 139 |         self.lazer = Some(lazer);
[INFO] [stdout] 140 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:142:5
[INFO] [stdout]     |
[INFO] [stdout] 142 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 143 | |     pub fn large_tick_hits(&mut self, large_tick_hits: u32) {
[INFO] [stdout] 144 | |         self.large_tick_hits = Some(large_tick_hits);
[INFO] [stdout] 145 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 142 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 143 |     pub fn large_tick_hits(&mut self, large_tick_hits: u32) {
[INFO] [stdout] 144 |         self.large_tick_hits = Some(large_tick_hits);
[INFO] [stdout] 145 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:147:5
[INFO] [stdout]     |
[INFO] [stdout] 147 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 148 | |     pub fn small_tick_hits(&mut self, small_tick_hits: u32) {
[INFO] [stdout] 149 | |         self.small_tick_hits = Some(small_tick_hits);
[INFO] [stdout] 150 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 147 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 148 |     pub fn small_tick_hits(&mut self, small_tick_hits: u32) {
[INFO] [stdout] 149 |         self.small_tick_hits = Some(small_tick_hits);
[INFO] [stdout] 150 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:152:5
[INFO] [stdout]     |
[INFO] [stdout] 152 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 153 | |     pub fn slider_end_hits(&mut self, slider_end_hits: u32) {
[INFO] [stdout] 154 | |         self.slider_end_hits = Some(slider_end_hits);
[INFO] [stdout] 155 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 152 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 153 |     pub fn slider_end_hits(&mut self, slider_end_hits: u32) {
[INFO] [stdout] 154 |         self.slider_end_hits = Some(slider_end_hits);
[INFO] [stdout] 155 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:157:5
[INFO] [stdout]     |
[INFO] [stdout] 157 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 158 | |     pub fn n300(&mut self, n300: u32) {
[INFO] [stdout] 159 | |         self.n300 = Some(n300);
[INFO] [stdout] 160 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 157 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 158 |     pub fn n300(&mut self, n300: u32) {
[INFO] [stdout] 159 |         self.n300 = Some(n300);
[INFO] [stdout] 160 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:162:5
[INFO] [stdout]     |
[INFO] [stdout] 162 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 163 | |     pub fn n100(&mut self, n100: u32) {
[INFO] [stdout] 164 | |         self.n100 = Some(n100);
[INFO] [stdout] 165 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 162 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 163 |     pub fn n100(&mut self, n100: u32) {
[INFO] [stdout] 164 |         self.n100 = Some(n100);
[INFO] [stdout] 165 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:167:5
[INFO] [stdout]     |
[INFO] [stdout] 167 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 168 | |     pub fn n50(&mut self, n50: u32) {
[INFO] [stdout] 169 | |         self.n50 = Some(n50);
[INFO] [stdout] 170 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 167 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 168 |     pub fn n50(&mut self, n50: u32) {
[INFO] [stdout] 169 |         self.n50 = Some(n50);
[INFO] [stdout] 170 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:172:5
[INFO] [stdout]     |
[INFO] [stdout] 172 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 173 | |     pub fn n_katu(&mut self, n_katu: u32) {
[INFO] [stdout] 174 | |         self.n_katu = Some(n_katu);
[INFO] [stdout] 175 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 172 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 173 |     pub fn n_katu(&mut self, n_katu: u32) {
[INFO] [stdout] 174 |         self.n_katu = Some(n_katu);
[INFO] [stdout] 175 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:177:5
[INFO] [stdout]     |
[INFO] [stdout] 177 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 178 | |     pub fn n_geki(&mut self, n_geki: u32) {
[INFO] [stdout] 179 | |         self.n_geki = Some(n_geki);
[INFO] [stdout] 180 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 177 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 178 |     pub fn n_geki(&mut self, n_geki: u32) {
[INFO] [stdout] 179 |         self.n_geki = Some(n_geki);
[INFO] [stdout] 180 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:182:5
[INFO] [stdout]     |
[INFO] [stdout] 182 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 183 | |     pub fn generate_state(&self, beatmap: &Beatmap) -> state::ScoreState {
[INFO] [stdout] 184 | |         let mut performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 185 | |         performance.generate_state().into()
[INFO] [stdout] 186 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 182 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 183 |     pub fn generate_state(&self, beatmap: &Beatmap) -> state::ScoreState {
[INFO] [stdout] 184 |         let mut performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 185 |         performance.generate_state().into()
[INFO] [stdout] 186 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:188:5
[INFO] [stdout]     |
[INFO] [stdout] 188 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 189 | |     pub fn generate_state_from_difficulty(
[INFO] [stdout] 190 | |         &self,
[INFO] [stdout] 191 | |         difficulty_attr: DifficultyAttributes,
[INFO] [stdout] ...   |
[INFO] [stdout] 196 | |         performance.generate_state().into()
[INFO] [stdout] 197 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 188 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 189 |     pub fn generate_state_from_difficulty(
[INFO] [stdout] ...
[INFO] [stdout] 196 |         performance.generate_state().into()
[INFO] [stdout] 197 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:199:5
[INFO] [stdout]     |
[INFO] [stdout] 199 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 200 | |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::PerformanceAttributes {
[INFO] [stdout] 201 | |         let performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 202 | |         performance.calculate().into()
[INFO] [stdout] 203 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 199 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 200 |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::PerformanceAttributes {
[INFO] [stdout] 201 |         let performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 202 |         performance.calculate().into()
[INFO] [stdout] 203 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:205:5
[INFO] [stdout]     |
[INFO] [stdout] 205 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 206 | |     pub fn calculate_from_difficulty(
[INFO] [stdout] 207 | |         &self,
[INFO] [stdout] 208 | |         difficulty_attr: DifficultyAttributes,
[INFO] [stdout] ...   |
[INFO] [stdout] 213 | |         performance.calculate().into()
[INFO] [stdout] 214 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 205 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 206 |     pub fn calculate_from_difficulty(
[INFO] [stdout] ...
[INFO] [stdout] 213 |         performance.calculate().into()
[INFO] [stdout] 214 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:216:5
[INFO] [stdout]     |
[INFO] [stdout] 216 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 217 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 218 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 219 | |             return mods.clock_rate().unwrap_or(1.0);
[INFO] [stdout] ...   |
[INFO] [stdout] 226 | |         1.0
[INFO] [stdout] 227 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 216 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 217 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 226 |         1.0
[INFO] [stdout] 227 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:49:6
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Performance {
[INFO] [stdout]    |      ^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl unsafe(Performance) {
[INFO] [stdout]    |      +++++++           +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/state.rs:147:3
[INFO] [stdout]     |
[INFO] [stdout] 147 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 147 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/state.rs:154:3
[INFO] [stdout]     |
[INFO] [stdout] 154 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 154 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | /     #[ffi_service_ctor]
[INFO] [stdout] 22 | |     pub fn new(mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 23 | |         Ok(Self {
[INFO] [stdout] 24 | |             mods: rosu_mods::GameMods::new(),
[INFO] [stdout] 25 | |             mode: Some(mode)
[INFO] [stdout] 26 | |         })
[INFO] [stdout] 27 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 21 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 22 |     pub fn new(mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 26 |         })
[INFO] [stdout] 27 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | /     #[ffi_service_ctor]
[INFO] [stdout] 30 | |     pub fn from_acronyms(str: AsciiPointer, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 31 | |         Ok(Self {
[INFO] [stdout] 32 | |             mods: rosu_mods::GameMods::from_intermode(&rosu_mods::GameModsIntermode::from_acronyms(
[INFO] [stdout] ...  |
[INFO] [stdout] 36 | |         })
[INFO] [stdout] 37 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 29 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 30 |     pub fn from_acronyms(str: AsciiPointer, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 36 |         })
[INFO] [stdout] 37 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | /     #[ffi_service_ctor]
[INFO] [stdout] 40 | |     pub fn from_bits(bits: u32, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 41 | |         Ok(Self {
[INFO] [stdout] 42 | |             mods: rosu_mods::GameMods::from_intermode(&rosu_mods::GameModsIntermode::from_bits(bits), mode.into()),
[INFO] [stdout] 43 | |             mode: Some(mode)
[INFO] [stdout] 44 | |         })
[INFO] [stdout] 45 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 40 |     pub fn from_bits(bits: u32, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 44 |         })
[INFO] [stdout] 45 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | /     #[ffi_service_ctor]
[INFO] [stdout] 49 | |     pub fn from_json(str: AsciiPointer, mode: Mode, deny_unknown_fields: bool) -> Result<Self, Error> {
[INFO] [stdout] 50 | |         let s = str.as_str()?;
[INFO] [stdout] 51 | |         let mut d = serde_json::Deserializer::from_str(s);
[INFO] [stdout] ...  |
[INFO] [stdout] 56 | |         })
[INFO] [stdout] 57 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 48 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 49 |     pub fn from_json(str: AsciiPointer, mode: Mode, deny_unknown_fields: bool) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 56 |         })
[INFO] [stdout] 57 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]    Compiling rosu_pp_ffi_build v0.1.0 (/opt/rustwide/workdir/rosu_pp_ffi_build)
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 60 | |     pub fn remove_unknown_mods(&mut self) {
[INFO] [stdout] 61 | |         self.mods = self.mods.clone().into_iter().filter(|m| m.kind() != UnknownMod::kind()).collect();
[INFO] [stdout] 62 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 59 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 60 |     pub fn remove_unknown_mods(&mut self) {
[INFO] [stdout] 61 |         self.mods = self.mods.clone().into_iter().filter(|m| m.kind() != UnknownMod::kind()).collect();
[INFO] [stdout] 62 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 | |     pub fn sanitize(&mut self) {
[INFO] [stdout] 67 | |         self.mods.sanitize();
[INFO] [stdout] 68 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 65 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 |     pub fn sanitize(&mut self) {
[INFO] [stdout] 67 |         self.mods.sanitize();
[INFO] [stdout] 68 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 71 | |     pub fn bits(&mut self) -> u32 {
[INFO] [stdout] 72 | |         self.mods.bits()
[INFO] [stdout] 73 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 70 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 71 |     pub fn bits(&mut self) -> u32 {
[INFO] [stdout] 72 |         self.mods.bits()
[INFO] [stdout] 73 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 76 | |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 77 | |         self.mods.len() as u32
[INFO] [stdout] 78 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 75 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 76 |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 77 |         self.mods.len() as u32
[INFO] [stdout] 78 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:80:5
[INFO] [stdout]    |
[INFO] [stdout] 80 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 81 | |     pub fn json(&mut self, str: &mut OwnedString) {
[INFO] [stdout] 82 | |         str.replace(serde_json::to_string_pretty(&self.mods).unwrap())
[INFO] [stdout] 83 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 80 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 81 |     pub fn json(&mut self, str: &mut OwnedString) {
[INFO] [stdout] 82 |         str.replace(serde_json::to_string_pretty(&self.mods).unwrap())
[INFO] [stdout] 83 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 | |     pub fn insert_json(&mut self, str: AsciiPointer, deny_unknown_fields: bool) -> bool {
[INFO] [stdout] 87 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 88 | |             let mut d = serde_json::Deserializer::from_str(s);
[INFO] [stdout] ...  |
[INFO] [stdout] 95 | |         false
[INFO] [stdout] 96 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 |     pub fn insert_json(&mut self, str: AsciiPointer, deny_unknown_fields: bool) -> bool {
[INFO] [stdout] ...
[INFO] [stdout] 95 |         false
[INFO] [stdout] 96 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:98:5
[INFO] [stdout]     |
[INFO] [stdout]  98 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 | |     pub fn insert(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] 100 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 101 | |             self.mods.insert(GameMod::new(s, self.mode.unwrap_or_default().into()));
[INFO] [stdout] ...   |
[INFO] [stdout] 104 | |         false
[INFO] [stdout] 105 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout]  98 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 |     pub fn insert(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] ...
[INFO] [stdout] 104 |         false
[INFO] [stdout] 105 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 | |     pub fn contains(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] 109 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 110 | |             if let Ok(m) = s.parse::<Acronym>(){
[INFO] [stdout] ...   |
[INFO] [stdout] 114 | |         false
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 107 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 |     pub fn contains(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] ...
[INFO] [stdout] 114 |         false
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn clear(&mut self) {
[INFO] [stdout] 119 | |         self.mods = rosu_mods::GameMods::new();
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn clear(&mut self) {
[INFO] [stdout] 119 |         self.mods = rosu_mods::GameMods::new();
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn clock_rate(&mut self) -> FFIOption<f64> {
[INFO] [stdout] 124 | |         self.mods.clock_rate().into()
[INFO] [stdout] 125 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn clock_rate(&mut self) -> FFIOption<f64> {
[INFO] [stdout] 124 |         self.mods.clock_rate().into()
[INFO] [stdout] 125 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:20:6
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl Mods {
[INFO] [stdout]    |      ^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 20 | impl unsafe(Mods) {
[INFO] [stdout]    |      +++++++    +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:22:5
[INFO] [stdout]    |
[INFO] [stdout] 22 | /     /// Create a [`GradualDifficulty`] for a map of any mode.
[INFO] [stdout] 23 | |     #[ffi_service_ctor]
[INFO] [stdout] 24 | |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 25 | |         Ok(Self { inner: rosu_pp::GradualDifficulty::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 26 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 22 ~     unsafe(/// Create a [`GradualDifficulty`] for a map of any mode.
[INFO] [stdout] 23 |     #[ffi_service_ctor]
[INFO] [stdout] 24 |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 25 |         Ok(Self { inner: rosu_pp::GradualDifficulty::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 26 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:28:5
[INFO] [stdout]    |
[INFO] [stdout] 28 | /     /// Create a [`GradualDifficulty`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 29 | |     #[ffi_service_ctor]
[INFO] [stdout] 30 | |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 31 | |         Ok(Self { inner: rosu_pp::GradualDifficulty::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 32 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 28 ~     unsafe(/// Create a [`GradualDifficulty`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 29 |     #[ffi_service_ctor]
[INFO] [stdout] 30 |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 31 |         Ok(Self { inner: rosu_pp::GradualDifficulty::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 32 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 | |     pub fn next(&mut self) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 36 | |         self.inner.next().map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 37 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 34 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 |     pub fn next(&mut self) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 36 |         self.inner.next().map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 37 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 | |     pub fn nth(&mut self, n: u32) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 41 | |         self.inner.nth(n as usize).map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 42 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 |     pub fn nth(&mut self, n: u32) -> FFIOption<attributes::DifficultyAttributes> {
[INFO] [stdout] 41 |         self.inner.nth(n as usize).map(attributes::DifficultyAttributes::from).into()
[INFO] [stdout] 42 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:44:5
[INFO] [stdout]    |
[INFO] [stdout] 44 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 45 | |     pub fn len(&self) -> u32 {
[INFO] [stdout] 46 | |         self.inner.len() as u32
[INFO] [stdout] 47 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 44 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 45 |     pub fn len(&self) -> u32 {
[INFO] [stdout] 46 |         self.inner.len() as u32
[INFO] [stdout] 47 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:21:6
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl GradualDifficulty {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 21 | impl unsafe(GradualDifficulty) {
[INFO] [stdout]    |      +++++++                 +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 | /     /// Create a [`GradualPerformance`] for a map of any mode.
[INFO] [stdout] 62 | |     #[ffi_service_ctor]
[INFO] [stdout] 63 | |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 64 | |         Ok(Self { inner: rosu_pp::GradualPerformance::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 65 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 61 ~     unsafe(/// Create a [`GradualPerformance`] for a map of any mode.
[INFO] [stdout] 62 |     #[ffi_service_ctor]
[INFO] [stdout] 63 |     pub fn new(difficulty: &Difficulty, beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 64 |         Ok(Self { inner: rosu_pp::GradualPerformance::new(difficulty.construct(), &beatmap.inner) })
[INFO] [stdout] 65 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:67:5
[INFO] [stdout]    |
[INFO] [stdout] 67 | /     /// Create a [`GradualPerformance`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 68 | |     #[ffi_service_ctor]
[INFO] [stdout] 69 | |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 70 | |         Ok(Self { inner: rosu_pp::GradualPerformance::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 71 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 67 ~     unsafe(/// Create a [`GradualPerformance`] for a [`Beatmap`] on a specific [`GameMode`].
[INFO] [stdout] 68 |     #[ffi_service_ctor]
[INFO] [stdout] 69 |     pub fn new_with_mode(difficulty: &Difficulty, beatmap: &Beatmap, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 70 |         Ok(Self { inner: rosu_pp::GradualPerformance::new_with_mode(difficulty.construct(), &beatmap.inner, mode.into())? })
[INFO] [stdout] 71 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:73:5
[INFO] [stdout]    |
[INFO] [stdout] 73 | /     /// Process the next hit object and calculate the performance attributes
[INFO] [stdout] 74 | |     /// for the resulting score state.
[INFO] [stdout] 75 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 76 | |     pub fn next(&mut self, state: ScoreState) -> FFIOption<attributes::PerformanceAttributes> {
[INFO] [stdout] 77 | |         self.inner.next(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 78 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 73 ~     unsafe(/// Process the next hit object and calculate the performance attributes
[INFO] [stdout] 74 |     /// for the resulting score state.
[INFO] [stdout] ...
[INFO] [stdout] 77 |         self.inner.next(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 78 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:80:5
[INFO] [stdout]    |
[INFO] [stdout] 80 | /     /// Process all remaining hit objects and calculate the final performance
[INFO] [stdout] 81 | |     /// attributes.
[INFO] [stdout] 82 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 83 | |     pub fn last(&mut self, state: ScoreState) -> FFIOption<attributes::PerformanceAttributes> {
[INFO] [stdout] 84 | |         self.inner.last(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 85 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 80 ~     unsafe(/// Process all remaining hit objects and calculate the final performance
[INFO] [stdout] 81 |     /// attributes.
[INFO] [stdout] ...
[INFO] [stdout] 84 |         self.inner.last(state.into()).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 85 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 | /     /// Process everything up to the next `n`th hitobject and calculate the
[INFO] [stdout] 88 | |     /// performance attributes for the resulting score state.
[INFO] [stdout] 89 | |     ///
[INFO] [stdout] 90 | |     /// Note that the count is zero-indexed, so `n=0` will process 1 object,
[INFO] [stdout] ...  |
[INFO] [stdout] 94 | |         self.inner.nth(state.into(), n as usize).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 95 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 87 ~     unsafe(/// Process everything up to the next `n`th hitobject and calculate the
[INFO] [stdout] 88 |     /// performance attributes for the resulting score state.
[INFO] [stdout] ...
[INFO] [stdout] 94 |         self.inner.nth(state.into(), n as usize).map(attributes::PerformanceAttributes::from).into()
[INFO] [stdout] 95 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/gradual.rs:97:5
[INFO] [stdout]     |
[INFO] [stdout]  97 | /     /// Returns the amount of remaining objects.
[INFO] [stdout]  98 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 | |     pub fn len(&self) -> u32 {
[INFO] [stdout] 100 | |         self.inner.len() as u32
[INFO] [stdout] 101 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout]     = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout]  97 ~     unsafe(/// Returns the amount of remaining objects.
[INFO] [stdout]  98 |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 |     pub fn len(&self) -> u32 {
[INFO] [stdout] 100 |         self.inner.len() as u32
[INFO] [stdout] 101 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/gradual.rs:60:6
[INFO] [stdout]    |
[INFO] [stdout] 60 | impl GradualPerformance {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 60 | impl unsafe(GradualPerformance) {
[INFO] [stdout]    |      +++++++                  +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/lib.rs:26:3
[INFO] [stdout]    |
[INFO] [stdout] 26 | #[no_mangle]
[INFO] [stdout]    |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout]    = warning: this is accepted in the current edition (Rust 2021) but is a hard error in Rust 2024!
[INFO] [stdout]    = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-attributes.html>
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 26 | #[unsafe(no_mangle)]
[INFO] [stdout]    |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning[E0133]: call to unsafe function `core::slice::<impl [T]>::get_unchecked` is unsafe and requires unsafe block
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:157:9
[INFO] [stdout]     |
[INFO] [stdout] 157 |         self.inner.get_unchecked(index as usize).into()
[INFO] [stdout]     |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ call to unsafe function
[INFO] [stdout]     |
[INFO] [stdout]     = note: consult the function's documentation for information on how to avoid undefined behavior
[INFO] [stdout] note: an unsafe function restricts its caller, but its body is safe by default
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:156:5
[INFO] [stdout]     |
[INFO] [stdout] 156 |     unsafe fn get_unchecked(&mut self, index: u32) -> HitObject {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     = note: for more information, see <https://doc.rust-lang.org/edition-guide/rust-2024/unsafe-op-in-unsafe-fn.html>
[INFO] [stdout]     = note: `--force-warn unsafe-op-in-unsafe-fn` implied by `--force-warn rust-2024-compatibility`
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] For more information about this error, try `rustc --explain E0133`.
[INFO] [stdout] 
[INFO] [stderr]    Migrating rosu_pp_ffi_build/build.rs from 2021 edition to 2024
[INFO] [stderr]    Migrating rosu_pp_ffi_build/src/lib.rs from 2021 edition to 2024
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 51.17s
[INFO] [stderr] crater-edition-check: rosu_pp_ffi v0.2.0 (/opt/rustwide/workdir/rosu_pp_ffi) updating edition from 2021 to 2024
[INFO] [stderr] crater-edition-check: rosu_pp_ffi_build v0.1.0 (/opt/rustwide/workdir/rosu_pp_ffi_build) updating edition from 2021 to 2024
[INFO] [stderr]    Compiling rosu_pp_ffi v0.2.0 (/opt/rustwide/workdir/rosu_pp_ffi)
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_ctor]
[INFO] [stdout] 86 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 87 | |         Ok(Self::default())
[INFO] [stdout] 88 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 86 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 87 |         Ok(Self::default())
[INFO] [stdout] 88 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 | |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 92 | |         self.mode = Some(mode);
[INFO] [stdout] 93 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 90 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 92 |         self.mode = Some(mode);
[INFO] [stdout] 93 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 97 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 98 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 95 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 97 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 98 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 102 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 103 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 100 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 102 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 103 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 | /     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 106 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 107 | |             str.as_str()?,
[INFO] [stdout] 108 | |         ));
[INFO] [stdout] 109 | |         Ok(())
[INFO] [stdout] 110 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 105 ~     unsafe(pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 106 |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] ...
[INFO] [stdout] 109 |         Ok(())
[INFO] [stdout] 110 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 114 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 112 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 114 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 119 | |         self.ar = Some(ar);
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 119 |         self.ar = Some(ar);
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 124 | |         self.cs = Some(cs);
[INFO] [stdout] 125 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 124 |         self.cs = Some(cs);
[INFO] [stdout] 125 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 129 | |         self.hp = Some(hp);
[INFO] [stdout] 130 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 127 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 129 |         self.hp = Some(hp);
[INFO] [stdout] 130 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 134 | |         self.od = Some(od);
[INFO] [stdout] 135 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 132 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 134 |         self.od = Some(od);
[INFO] [stdout] 135 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 139 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 140 | |             return mods.clock_rate().unwrap_or(1.0)
[INFO] [stdout] ...   |
[INFO] [stdout] 147 | |         1.0
[INFO] [stdout] 148 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 137 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 147 |         1.0
[INFO] [stdout] 148 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/attributes.rs:150:5
[INFO] [stdout]     |
[INFO] [stdout] 150 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 151 | |     pub fn build(&self, beatmap: *const Beatmap) -> BeatmapAttributes {
[INFO] [stdout] 152 | |         let beatmap = unsafe {
[INFO] [stdout] 153 | |             beatmap
[INFO] [stdout] ...   |
[INFO] [stdout] 200 | |         builder.build().into()
[INFO] [stdout] 201 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 150 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 151 |     pub fn build(&self, beatmap: *const Beatmap) -> BeatmapAttributes {
[INFO] [stdout] ...
[INFO] [stdout] 200 |         builder.build().into()
[INFO] [stdout] 201 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/attributes.rs:84:6
[INFO] [stdout]    |
[INFO] [stdout] 84 | impl BeatmapAttributesBuilder {
[INFO] [stdout]    |      ^^^^^^^^^^^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 84 | impl unsafe(BeatmapAttributesBuilder) {
[INFO] [stdout]    |      +++++++                        +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:108:5
[INFO] [stdout]     |
[INFO] [stdout] 108 | /     #[ffi_service_ctor]
[INFO] [stdout] 109 | |     pub fn new(beatmap: &'a Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 110 | |         Ok(Self {
[INFO] [stdout] 111 | |             inner: &beatmap.inner.hit_objects,
[INFO] [stdout] ...   |
[INFO] [stdout] 114 | |         })
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 108 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 109 |     pub fn new(beatmap: &'a Beatmap) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 114 |         })
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 119 | |         self.len
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 119 |         self.len
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn get(&mut self, index: u32) -> FFIOption<HitObject> {
[INFO] [stdout] 124 | |         if index < self.len {
[INFO] [stdout] 125 | |             FFIOption::some(unsafe { self.get_unchecked(index) })
[INFO] [stdout] ...   |
[INFO] [stdout] 129 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn get(&mut self, index: u32) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 128 |         }
[INFO] [stdout] 129 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:131:5
[INFO] [stdout]     |
[INFO] [stdout] 131 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 132 | |     pub fn next(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] 133 | |         if self.index < self.len {
[INFO] [stdout] 134 | |             self.index += 1;
[INFO] [stdout] ...   |
[INFO] [stdout] 139 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 131 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 132 |     pub fn next(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 138 |         }
[INFO] [stdout] 139 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:141:5
[INFO] [stdout]     |
[INFO] [stdout] 141 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 142 | |     pub fn prev(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] 143 | |         if self.index > 0 {
[INFO] [stdout] 144 | |             self.index -= 1;
[INFO] [stdout] ...   |
[INFO] [stdout] 149 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 141 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 142 |     pub fn prev(&mut self) -> FFIOption<HitObject> {
[INFO] [stdout] ...
[INFO] [stdout] 148 |         }
[INFO] [stdout] 149 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:151:5
[INFO] [stdout]     |
[INFO] [stdout] 151 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 152 | |     pub fn reset(&mut self) {
[INFO] [stdout] 153 | |         self.index = 0;
[INFO] [stdout] 154 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 151 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 152 |     pub fn reset(&mut self) {
[INFO] [stdout] 153 |         self.index = 0;
[INFO] [stdout] 154 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/hitobjects.rs:107:10
[INFO] [stdout]     |
[INFO] [stdout] 107 | impl<'a> HitObjects<'a> {
[INFO] [stdout]     |          ^^^^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 107 | impl<'a> unsafe(HitObjects<'a>) {
[INFO] [stdout]     |          +++++++              +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:24:5
[INFO] [stdout]    |
[INFO] [stdout] 24 | /     #[ffi_service_ctor]
[INFO] [stdout] 25 | |     pub fn from_bytes(data: FFISlice<u8>) -> Result<Self, Error> {
[INFO] [stdout] 26 | |         Ok(Self {
[INFO] [stdout] 27 | |             inner: rosu_pp::Beatmap::from_bytes(data.as_slice())?,
[INFO] [stdout] 28 | |         })
[INFO] [stdout] 29 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 24 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 25 |     pub fn from_bytes(data: FFISlice<u8>) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 28 |         })
[INFO] [stdout] 29 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:31:5
[INFO] [stdout]    |
[INFO] [stdout] 31 | /     #[ffi_service_ctor]
[INFO] [stdout] 32 | |     pub fn from_path(path: AsciiPointer) -> Result<Self, Error> {
[INFO] [stdout] 33 | |         Ok(Self {
[INFO] [stdout] 34 | |             inner: rosu_pp::Beatmap::from_path(
[INFO] [stdout] ...  |
[INFO] [stdout] 37 | |         })
[INFO] [stdout] 38 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 31 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 32 |     pub fn from_path(path: AsciiPointer) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 37 |         })
[INFO] [stdout] 38 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:40:5
[INFO] [stdout]    |
[INFO] [stdout] 40 | /     #[ffi_service_ctor]
[INFO] [stdout] 41 | |     pub fn from_clone(beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] 42 | |         Ok(Self {
[INFO] [stdout] 43 | |             inner: beatmap.inner.clone(),
[INFO] [stdout] 44 | |         })
[INFO] [stdout] 45 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 40 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 41 |     pub fn from_clone(beatmap: &Beatmap) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 44 |         })
[INFO] [stdout] 45 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:47:5
[INFO] [stdout]    |
[INFO] [stdout] 47 | /     /// Convert a Beatmap to the specified mode
[INFO] [stdout] 48 | |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 | |     pub fn convert(&mut self, mode: Mode, mods: &Mods) -> bool {
[INFO] [stdout] 50 | |         self.inner.convert_mut(mode.into(), &GameMods::from(mods.mods.clone())).is_ok()
[INFO] [stdout] 51 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 47 ~     unsafe(/// Convert a Beatmap to the specified mode
[INFO] [stdout] 48 |     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 |     pub fn convert(&mut self, mode: Mode, mods: &Mods) -> bool {
[INFO] [stdout] 50 |         self.inner.convert_mut(mode.into(), &GameMods::from(mods.mods.clone())).is_ok()
[INFO] [stdout] 51 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 54 | |     pub fn bpm(&mut self) -> f64 {
[INFO] [stdout] 55 | |         self.inner.bpm()
[INFO] [stdout] 56 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 53 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 54 |     pub fn bpm(&mut self) -> f64 {
[INFO] [stdout] 55 |         self.inner.bpm()
[INFO] [stdout] 56 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:58:5
[INFO] [stdout]    |
[INFO] [stdout] 58 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 59 | |     pub fn total_break_time(&mut self) -> f64 {
[INFO] [stdout] 60 | |         self.inner.total_break_time()
[INFO] [stdout] 61 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 58 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 59 |     pub fn total_break_time(&mut self) -> f64 {
[INFO] [stdout] 60 |         self.inner.total_break_time()
[INFO] [stdout] 61 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:63:5
[INFO] [stdout]    |
[INFO] [stdout] 63 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 64 | |     pub fn version(&mut self) -> i32 {
[INFO] [stdout] 65 | |         self.inner.version
[INFO] [stdout] 66 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 63 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 64 |     pub fn version(&mut self) -> i32 {
[INFO] [stdout] 65 |         self.inner.version
[INFO] [stdout] 66 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:68:5
[INFO] [stdout]    |
[INFO] [stdout] 68 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 69 | |     pub fn is_convert(&mut self) -> bool {
[INFO] [stdout] 70 | |         self.inner.is_convert
[INFO] [stdout] 71 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 68 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 69 |     pub fn is_convert(&mut self) -> bool {
[INFO] [stdout] 70 |         self.inner.is_convert
[INFO] [stdout] 71 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:74:5
[INFO] [stdout]    |
[INFO] [stdout] 74 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 75 | |     pub fn stack_leniency(&mut self) -> f32 {
[INFO] [stdout] 76 | |         self.inner.stack_leniency
[INFO] [stdout] 77 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 74 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 75 |     pub fn stack_leniency(&mut self) -> f32 {
[INFO] [stdout] 76 |         self.inner.stack_leniency
[INFO] [stdout] 77 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:79:5
[INFO] [stdout]    |
[INFO] [stdout] 79 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 80 | |     pub fn mode(&mut self) -> Mode {
[INFO] [stdout] 81 | |         self.inner.mode.into()
[INFO] [stdout] 82 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 79 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 80 |     pub fn mode(&mut self) -> Mode {
[INFO] [stdout] 81 |         self.inner.mode.into()
[INFO] [stdout] 82 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 | |     pub fn ar(&mut self) -> f32 {
[INFO] [stdout] 87 | |         self.inner.ar
[INFO] [stdout] 88 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 |     pub fn ar(&mut self) -> f32 {
[INFO] [stdout] 87 |         self.inner.ar
[INFO] [stdout] 88 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:90:5
[INFO] [stdout]    |
[INFO] [stdout] 90 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 | |     pub fn cs(&mut self) -> f32 {
[INFO] [stdout] 92 | |         self.inner.ar
[INFO] [stdout] 93 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 90 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 91 |     pub fn cs(&mut self) -> f32 {
[INFO] [stdout] 92 |         self.inner.ar
[INFO] [stdout] 93 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:95:5
[INFO] [stdout]    |
[INFO] [stdout] 95 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 | |     pub fn hp(&mut self) -> f32 {
[INFO] [stdout] 97 | |         self.inner.ar
[INFO] [stdout] 98 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 95 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 96 |     pub fn hp(&mut self) -> f32 {
[INFO] [stdout] 97 |         self.inner.ar
[INFO] [stdout] 98 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:100:5
[INFO] [stdout]     |
[INFO] [stdout] 100 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 | |     pub fn od(&mut self) -> f32 {
[INFO] [stdout] 102 | |         self.inner.ar
[INFO] [stdout] 103 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 100 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 101 |     pub fn od(&mut self) -> f32 {
[INFO] [stdout] 102 |         self.inner.ar
[INFO] [stdout] 103 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:105:5
[INFO] [stdout]     |
[INFO] [stdout] 105 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 106 | |     pub fn slider_multiplier(&mut self) -> f64 {
[INFO] [stdout] 107 | |         self.inner.slider_multiplier
[INFO] [stdout] 108 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 105 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 106 |     pub fn slider_multiplier(&mut self) -> f64 {
[INFO] [stdout] 107 |         self.inner.slider_multiplier
[INFO] [stdout] 108 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:110:5
[INFO] [stdout]     |
[INFO] [stdout] 110 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 111 | |     pub fn slider_tick_rate(&mut self) -> f64 {
[INFO] [stdout] 112 | |         self.inner.slider_tick_rate
[INFO] [stdout] 113 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 110 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 111 |     pub fn slider_tick_rate(&mut self) -> f64 {
[INFO] [stdout] 112 |         self.inner.slider_tick_rate
[INFO] [stdout] 113 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/beatmap/mod.rs:115:5
[INFO] [stdout]     |
[INFO] [stdout] 115 | /     /// Check whether hitobjects appear too suspicious for further calculation.
[INFO] [stdout] 116 | |     ///
[INFO] [stdout] 117 | |     /// Sometimes a [`Beatmap`] isn't created for gameplay but rather to test
[INFO] [stdout] 118 | |     /// the limits of osu! itself. Difficulty- and/or performance calculation
[INFO] [stdout] ...   |
[INFO] [stdout] 123 | |         self.inner.check_suspicion().map_err(Into::into).err().into()
[INFO] [stdout] 124 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 115 ~     unsafe(/// Check whether hitobjects appear too suspicious for further calculation.
[INFO] [stdout] 116 |     ///
[INFO] [stdout] ...
[INFO] [stdout] 123 |         self.inner.check_suspicion().map_err(Into::into).err().into()
[INFO] [stdout] 124 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/beatmap/mod.rs:23:6
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl Beatmap {
[INFO] [stdout]    |      ^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 23 | impl unsafe(Beatmap) {
[INFO] [stdout]    |      +++++++       +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:38:5
[INFO] [stdout]    |
[INFO] [stdout] 38 | /     #[ffi_service_ctor]
[INFO] [stdout] 39 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 40 | |         Ok(Self::default())
[INFO] [stdout] 41 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 38 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 39 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 40 |         Ok(Self::default())
[INFO] [stdout] 41 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:43:5
[INFO] [stdout]    |
[INFO] [stdout] 43 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 44 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 45 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 46 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 43 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 44 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 45 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 46 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 50 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 51 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 48 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 49 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 50 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 51 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:53:5
[INFO] [stdout]    |
[INFO] [stdout] 53 | /     #[ffi_service_method(on_panic = "ffi_error")]
[INFO] [stdout] 54 | |     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 55 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 56 | |             str.as_str()?,
[INFO] [stdout] 57 | |         ));
[INFO] [stdout] 58 | |         Ok(())
[INFO] [stdout] 59 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 53 ~     unsafe(#[ffi_service_method(on_panic = "ffi_error")]
[INFO] [stdout] 54 |     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] ...
[INFO] [stdout] 58 |         Ok(())
[INFO] [stdout] 59 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:61:5
[INFO] [stdout]    |
[INFO] [stdout] 61 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 62 | |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 63 | |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 64 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 61 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 62 |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 63 |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 64 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:66:5
[INFO] [stdout]    |
[INFO] [stdout] 66 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 67 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 68 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 69 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 66 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 67 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 68 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 69 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:71:5
[INFO] [stdout]    |
[INFO] [stdout] 71 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 72 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 73 | |         self.ar = Some(ar);
[INFO] [stdout] 74 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 71 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 72 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 73 |         self.ar = Some(ar);
[INFO] [stdout] 74 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:76:5
[INFO] [stdout]    |
[INFO] [stdout] 76 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 77 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 78 | |         self.cs = Some(cs);
[INFO] [stdout] 79 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 76 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 77 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 78 |         self.cs = Some(cs);
[INFO] [stdout] 79 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:81:5
[INFO] [stdout]    |
[INFO] [stdout] 81 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 82 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 83 | |         self.hp = Some(hp);
[INFO] [stdout] 84 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 81 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 82 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout] 83 |         self.hp = Some(hp);
[INFO] [stdout] 84 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:86:5
[INFO] [stdout]    |
[INFO] [stdout] 86 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 87 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 88 | |         self.od = Some(od);
[INFO] [stdout] 89 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 86 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 87 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 88 |         self.od = Some(od);
[INFO] [stdout] 89 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:91:5
[INFO] [stdout]    |
[INFO] [stdout] 91 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 92 | |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 93 | |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 94 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 91 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 92 |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 93 |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 94 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:96:5
[INFO] [stdout]    |
[INFO] [stdout] 96 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 97 | |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 98 | |         self.lazer = Some(lazer);
[INFO] [stdout] 99 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 96 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 97 |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 98 |         self.lazer = Some(lazer);
[INFO] [stdout] 99 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/difficulty.rs:101:5
[INFO] [stdout]     |
[INFO] [stdout] 101 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 102 | |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::DifficultyAttributes {
[INFO] [stdout] 103 | |         self.construct().calculate(&beatmap.inner).into()
[INFO] [stdout] 104 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 101 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 102 |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::DifficultyAttributes {
[INFO] [stdout] 103 |         self.construct().calculate(&beatmap.inner).into()
[INFO] [stdout] 104 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/difficulty.rs:106:5
[INFO] [stdout]     |
[INFO] [stdout] 106 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 107 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 108 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 109 | |             return mods.clock_rate().unwrap_or(1.0)
[INFO] [stdout] ...   |
[INFO] [stdout] 116 | |         1.0
[INFO] [stdout] 117 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 106 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 107 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 116 |         1.0
[INFO] [stdout] 117 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/difficulty.rs:37:6
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl Difficulty {
[INFO] [stdout]    |      ^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 37 | impl unsafe(Difficulty) {
[INFO] [stdout]    |      +++++++          +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/attributes.rs:108:3
[INFO] [stdout]     |
[INFO] [stdout] 108 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 108 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/attributes.rs:119:3
[INFO] [stdout]     |
[INFO] [stdout] 119 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 119 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:18:5
[INFO] [stdout]    |
[INFO] [stdout] 18 | /     #[ffi_service_ctor]
[INFO] [stdout] 19 | |     pub fn from_c_str(str: AsciiPointer<'_>) -> Result<Self, Error> {
[INFO] [stdout] 20 | |         Ok(Self {
[INFO] [stdout] 21 | |             inner: MaybeUninit::new(str.as_c_str().ok_or(Error::Null)?.to_owned()),
[INFO] [stdout] 22 | |             is_init: true
[INFO] [stdout] 23 | |         })
[INFO] [stdout] 24 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 18 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 19 |     pub fn from_c_str(str: AsciiPointer<'_>) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 23 |         })
[INFO] [stdout] 24 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:26:5
[INFO] [stdout]    |
[INFO] [stdout] 26 | /     #[ffi_service_ctor]
[INFO] [stdout] 27 | |     pub fn empty() -> Result<Self, Error> {
[INFO] [stdout] 28 | |         Ok(Self {
[INFO] [stdout] 29 | |             inner: MaybeUninit::uninit(),
[INFO] [stdout] 30 | |             is_init: false
[INFO] [stdout] 31 | |         })
[INFO] [stdout] 32 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 26 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 27 |     pub fn empty() -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 31 |         })
[INFO] [stdout] 32 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:34:5
[INFO] [stdout]    |
[INFO] [stdout] 34 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 | |     pub fn is_init(&self) -> bool {
[INFO] [stdout] 36 | |        self.is_init
[INFO] [stdout] 37 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 34 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 35 |     pub fn is_init(&self) -> bool {
[INFO] [stdout] 36 |        self.is_init
[INFO] [stdout] 37 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 | |     pub fn to_cstr(&self) -> AsciiPointer<'_> {
[INFO] [stdout] 41 | |         AsciiPointer::from_cstr(unsafe { self.inner.assume_init_ref() })
[INFO] [stdout] 42 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 40 |     pub fn to_cstr(&self) -> AsciiPointer<'_> {
[INFO] [stdout] 41 |         AsciiPointer::from_cstr(unsafe { self.inner.assume_init_ref() })
[INFO] [stdout] 42 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/owned_string.rs:17:6
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl OwnedString {
[INFO] [stdout]    |      ^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 17 | impl unsafe(OwnedString) {
[INFO] [stdout]    |      +++++++           +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:50:5
[INFO] [stdout]    |
[INFO] [stdout] 50 | /     #[ffi_service_ctor]
[INFO] [stdout] 51 | |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 52 | |         Ok(Self::default())
[INFO] [stdout] 53 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 50 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 51 |     pub fn new() -> Result<Self, Error> {
[INFO] [stdout] 52 |         Ok(Self::default())
[INFO] [stdout] 53 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:55:5
[INFO] [stdout]    |
[INFO] [stdout] 55 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 56 | |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 57 | |         self.mode = Some(mode);
[INFO] [stdout] 58 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 55 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 56 |     pub fn mode(&mut self, mode: Mode) {
[INFO] [stdout] 57 |         self.mode = Some(mode);
[INFO] [stdout] 58 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:60:5
[INFO] [stdout]    |
[INFO] [stdout] 60 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 61 | |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 62 | |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 63 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 60 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 61 |     pub fn p_mods(&mut self, mods: &Mods) {
[INFO] [stdout] 62 |         self.mods = Some(mods.mods.clone());
[INFO] [stdout] 63 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 | |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 67 | |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 68 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 65 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 |     pub fn i_mods(&mut self, mods: u32) {
[INFO] [stdout] 67 |         self.mods_intermode = Some(GameModsIntermode::from_bits(mods));
[INFO] [stdout] 68 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 | /     pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 71 | |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] 72 | |             str.as_str()?,
[INFO] [stdout] 73 | |         ));
[INFO] [stdout] 74 | |         Ok(())
[INFO] [stdout] 75 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 70 ~     unsafe(pub fn s_mods(&mut self, str: AsciiPointer) -> Result<(), Error> {
[INFO] [stdout] 71 |         self.mods_intermode = Some(GameModsIntermode::from_acronyms(
[INFO] [stdout] ...
[INFO] [stdout] 74 |         Ok(())
[INFO] [stdout] 75 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:77:5
[INFO] [stdout]    |
[INFO] [stdout] 77 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 78 | |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 79 | |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 80 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 77 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 78 |     pub fn passed_objects(&mut self, passed_objects: u32) {
[INFO] [stdout] 79 |         self.passed_objects = Some(passed_objects);
[INFO] [stdout] 80 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:82:5
[INFO] [stdout]    |
[INFO] [stdout] 82 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 83 | |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 84 | |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 85 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 82 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 83 |     pub fn clock_rate(&mut self, clock_rate: f64) {
[INFO] [stdout] 84 |         self.clock_rate = Some(clock_rate);
[INFO] [stdout] 85 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:87:5
[INFO] [stdout]    |
[INFO] [stdout] 87 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 88 | |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 89 | |         self.ar = Some(ar);
[INFO] [stdout] 90 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 87 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 88 |     pub fn ar(&mut self, ar: f32) {
[INFO] [stdout] 89 |         self.ar = Some(ar);
[INFO] [stdout] 90 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:92:5
[INFO] [stdout]    |
[INFO] [stdout] 92 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 93 | |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 94 | |         self.cs = Some(cs);
[INFO] [stdout] 95 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 92 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 93 |     pub fn cs(&mut self, cs: f32) {
[INFO] [stdout] 94 |         self.cs = Some(cs);
[INFO] [stdout] 95 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:97:5
[INFO] [stdout]     |
[INFO] [stdout]  97 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  98 | |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout]  99 | |         self.hp = Some(hp);
[INFO] [stdout] 100 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout]  97 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  98 |     pub fn hp(&mut self, hp: f32) {
[INFO] [stdout]  99 |         self.hp = Some(hp);
[INFO] [stdout] 100 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:102:5
[INFO] [stdout]     |
[INFO] [stdout] 102 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 103 | |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 104 | |         self.od = Some(od);
[INFO] [stdout] 105 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 102 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 103 |     pub fn od(&mut self, od: f32) {
[INFO] [stdout] 104 |         self.od = Some(od);
[INFO] [stdout] 105 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 | |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 109 | |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 110 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 107 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 |     pub fn hardrock_offsets(&mut self, hardrock_offsets: bool) {
[INFO] [stdout] 109 |         self.hardrock_offsets = Some(hardrock_offsets);
[INFO] [stdout] 110 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:112:5
[INFO] [stdout]     |
[INFO] [stdout] 112 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 | |     pub fn state(&mut self, state: ScoreState) {
[INFO] [stdout] 114 | |         self.state = Some(state);
[INFO] [stdout] 115 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 112 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 113 |     pub fn state(&mut self, state: ScoreState) {
[INFO] [stdout] 114 |         self.state = Some(state);
[INFO] [stdout] 115 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:117:5
[INFO] [stdout]     |
[INFO] [stdout] 117 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 | |     pub fn accuracy(&mut self, accuracy: f64) {
[INFO] [stdout] 119 | |         self.accuracy = Some(accuracy);
[INFO] [stdout] 120 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 117 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 118 |     pub fn accuracy(&mut self, accuracy: f64) {
[INFO] [stdout] 119 |         self.accuracy = Some(accuracy);
[INFO] [stdout] 120 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:122:5
[INFO] [stdout]     |
[INFO] [stdout] 122 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 | |     pub fn misses(&mut self, misses: u32) {
[INFO] [stdout] 124 | |         self.misses = Some(misses);
[INFO] [stdout] 125 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 122 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 123 |     pub fn misses(&mut self, misses: u32) {
[INFO] [stdout] 124 |         self.misses = Some(misses);
[INFO] [stdout] 125 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:127:5
[INFO] [stdout]     |
[INFO] [stdout] 127 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 | |     pub fn combo(&mut self, combo: u32) {
[INFO] [stdout] 129 | |         self.combo = Some(combo);
[INFO] [stdout] 130 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 127 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 128 |     pub fn combo(&mut self, combo: u32) {
[INFO] [stdout] 129 |         self.combo = Some(combo);
[INFO] [stdout] 130 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:132:5
[INFO] [stdout]     |
[INFO] [stdout] 132 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 | |     pub fn hitresult_priority(&mut self, hitresult_priority: HitResultPriority) {
[INFO] [stdout] 134 | |         self.hitresult_priority = Some(hitresult_priority);
[INFO] [stdout] 135 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 132 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 133 |     pub fn hitresult_priority(&mut self, hitresult_priority: HitResultPriority) {
[INFO] [stdout] 134 |         self.hitresult_priority = Some(hitresult_priority);
[INFO] [stdout] 135 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:137:5
[INFO] [stdout]     |
[INFO] [stdout] 137 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 | |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 139 | |         self.lazer = Some(lazer);
[INFO] [stdout] 140 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 137 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 138 |     pub fn lazer(&mut self, lazer: bool) {
[INFO] [stdout] 139 |         self.lazer = Some(lazer);
[INFO] [stdout] 140 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:142:5
[INFO] [stdout]     |
[INFO] [stdout] 142 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 143 | |     pub fn large_tick_hits(&mut self, large_tick_hits: u32) {
[INFO] [stdout] 144 | |         self.large_tick_hits = Some(large_tick_hits);
[INFO] [stdout] 145 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 142 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 143 |     pub fn large_tick_hits(&mut self, large_tick_hits: u32) {
[INFO] [stdout] 144 |         self.large_tick_hits = Some(large_tick_hits);
[INFO] [stdout] 145 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:147:5
[INFO] [stdout]     |
[INFO] [stdout] 147 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 148 | |     pub fn small_tick_hits(&mut self, small_tick_hits: u32) {
[INFO] [stdout] 149 | |         self.small_tick_hits = Some(small_tick_hits);
[INFO] [stdout] 150 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 147 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 148 |     pub fn small_tick_hits(&mut self, small_tick_hits: u32) {
[INFO] [stdout] 149 |         self.small_tick_hits = Some(small_tick_hits);
[INFO] [stdout] 150 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:152:5
[INFO] [stdout]     |
[INFO] [stdout] 152 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 153 | |     pub fn slider_end_hits(&mut self, slider_end_hits: u32) {
[INFO] [stdout] 154 | |         self.slider_end_hits = Some(slider_end_hits);
[INFO] [stdout] 155 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 152 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 153 |     pub fn slider_end_hits(&mut self, slider_end_hits: u32) {
[INFO] [stdout] 154 |         self.slider_end_hits = Some(slider_end_hits);
[INFO] [stdout] 155 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:157:5
[INFO] [stdout]     |
[INFO] [stdout] 157 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 158 | |     pub fn n300(&mut self, n300: u32) {
[INFO] [stdout] 159 | |         self.n300 = Some(n300);
[INFO] [stdout] 160 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 157 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 158 |     pub fn n300(&mut self, n300: u32) {
[INFO] [stdout] 159 |         self.n300 = Some(n300);
[INFO] [stdout] 160 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:162:5
[INFO] [stdout]     |
[INFO] [stdout] 162 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 163 | |     pub fn n100(&mut self, n100: u32) {
[INFO] [stdout] 164 | |         self.n100 = Some(n100);
[INFO] [stdout] 165 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 162 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 163 |     pub fn n100(&mut self, n100: u32) {
[INFO] [stdout] 164 |         self.n100 = Some(n100);
[INFO] [stdout] 165 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:167:5
[INFO] [stdout]     |
[INFO] [stdout] 167 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 168 | |     pub fn n50(&mut self, n50: u32) {
[INFO] [stdout] 169 | |         self.n50 = Some(n50);
[INFO] [stdout] 170 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 167 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 168 |     pub fn n50(&mut self, n50: u32) {
[INFO] [stdout] 169 |         self.n50 = Some(n50);
[INFO] [stdout] 170 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:172:5
[INFO] [stdout]     |
[INFO] [stdout] 172 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 173 | |     pub fn n_katu(&mut self, n_katu: u32) {
[INFO] [stdout] 174 | |         self.n_katu = Some(n_katu);
[INFO] [stdout] 175 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 172 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 173 |     pub fn n_katu(&mut self, n_katu: u32) {
[INFO] [stdout] 174 |         self.n_katu = Some(n_katu);
[INFO] [stdout] 175 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:177:5
[INFO] [stdout]     |
[INFO] [stdout] 177 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 178 | |     pub fn n_geki(&mut self, n_geki: u32) {
[INFO] [stdout] 179 | |         self.n_geki = Some(n_geki);
[INFO] [stdout] 180 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 177 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 178 |     pub fn n_geki(&mut self, n_geki: u32) {
[INFO] [stdout] 179 |         self.n_geki = Some(n_geki);
[INFO] [stdout] 180 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:182:5
[INFO] [stdout]     |
[INFO] [stdout] 182 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 183 | |     pub fn generate_state(&self, beatmap: &Beatmap) -> state::ScoreState {
[INFO] [stdout] 184 | |         let mut performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 185 | |         performance.generate_state().into()
[INFO] [stdout] 186 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 182 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 183 |     pub fn generate_state(&self, beatmap: &Beatmap) -> state::ScoreState {
[INFO] [stdout] 184 |         let mut performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 185 |         performance.generate_state().into()
[INFO] [stdout] 186 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:188:5
[INFO] [stdout]     |
[INFO] [stdout] 188 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 189 | |     pub fn generate_state_from_difficulty(
[INFO] [stdout] 190 | |         &self,
[INFO] [stdout] 191 | |         difficulty_attr: DifficultyAttributes,
[INFO] [stdout] ...   |
[INFO] [stdout] 196 | |         performance.generate_state().into()
[INFO] [stdout] 197 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 188 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 189 |     pub fn generate_state_from_difficulty(
[INFO] [stdout] ...
[INFO] [stdout] 196 |         performance.generate_state().into()
[INFO] [stdout] 197 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:199:5
[INFO] [stdout]     |
[INFO] [stdout] 199 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 200 | |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::PerformanceAttributes {
[INFO] [stdout] 201 | |         let performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 202 | |         performance.calculate().into()
[INFO] [stdout] 203 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 199 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 200 |     pub fn calculate(&self, beatmap: &Beatmap) -> attributes::PerformanceAttributes {
[INFO] [stdout] 201 |         let performance = self.apply(rosu_pp::Performance::new(&beatmap.inner));
[INFO] [stdout] 202 |         performance.calculate().into()
[INFO] [stdout] 203 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:205:5
[INFO] [stdout]     |
[INFO] [stdout] 205 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 206 | |     pub fn calculate_from_difficulty(
[INFO] [stdout] 207 | |         &self,
[INFO] [stdout] 208 | |         difficulty_attr: DifficultyAttributes,
[INFO] [stdout] ...   |
[INFO] [stdout] 213 | |         performance.calculate().into()
[INFO] [stdout] 214 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 205 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 206 |     pub fn calculate_from_difficulty(
[INFO] [stdout] ...
[INFO] [stdout] 213 |         performance.calculate().into()
[INFO] [stdout] 214 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/performance.rs:216:5
[INFO] [stdout]     |
[INFO] [stdout] 216 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 217 | |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] 218 | |         if let Some(mods) = self.mods.as_ref() {
[INFO] [stdout] 219 | |             return mods.clock_rate().unwrap_or(1.0);
[INFO] [stdout] ...   |
[INFO] [stdout] 226 | |         1.0
[INFO] [stdout] 227 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 216 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 217 |     pub fn get_clock_rate(&mut self) -> f64 {
[INFO] [stdout] ...
[INFO] [stdout] 226 |         1.0
[INFO] [stdout] 227 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/performance.rs:49:6
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl Performance {
[INFO] [stdout]    |      ^^^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 49 | impl unsafe(Performance) {
[INFO] [stdout]    |      +++++++           +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/state.rs:147:3
[INFO] [stdout]     |
[INFO] [stdout] 147 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 147 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/state.rs:154:3
[INFO] [stdout]     |
[INFO] [stdout] 154 | #[no_mangle]
[INFO] [stdout]     |   ^^^^^^^^^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout] 154 | #[unsafe(no_mangle)]
[INFO] [stdout]     |   +++++++         +
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:21:5
[INFO] [stdout]    |
[INFO] [stdout] 21 | /     #[ffi_service_ctor]
[INFO] [stdout] 22 | |     pub fn new(mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 23 | |         Ok(Self {
[INFO] [stdout] 24 | |             mods: rosu_mods::GameMods::new(),
[INFO] [stdout] 25 | |             mode: Some(mode)
[INFO] [stdout] 26 | |         })
[INFO] [stdout] 27 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 21 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 22 |     pub fn new(mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 26 |         })
[INFO] [stdout] 27 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:29:5
[INFO] [stdout]    |
[INFO] [stdout] 29 | /     #[ffi_service_ctor]
[INFO] [stdout] 30 | |     pub fn from_acronyms(str: AsciiPointer, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 31 | |         Ok(Self {
[INFO] [stdout] 32 | |             mods: rosu_mods::GameMods::from_intermode(&rosu_mods::GameModsIntermode::from_acronyms(
[INFO] [stdout] ...  |
[INFO] [stdout] 36 | |         })
[INFO] [stdout] 37 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 29 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 30 |     pub fn from_acronyms(str: AsciiPointer, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 36 |         })
[INFO] [stdout] 37 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:39:5
[INFO] [stdout]    |
[INFO] [stdout] 39 | /     #[ffi_service_ctor]
[INFO] [stdout] 40 | |     pub fn from_bits(bits: u32, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] 41 | |         Ok(Self {
[INFO] [stdout] 42 | |             mods: rosu_mods::GameMods::from_intermode(&rosu_mods::GameModsIntermode::from_bits(bits), mode.into()),
[INFO] [stdout] 43 | |             mode: Some(mode)
[INFO] [stdout] 44 | |         })
[INFO] [stdout] 45 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 39 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 40 |     pub fn from_bits(bits: u32, mode: Mode) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 44 |         })
[INFO] [stdout] 45 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:48:5
[INFO] [stdout]    |
[INFO] [stdout] 48 | /     #[ffi_service_ctor]
[INFO] [stdout] 49 | |     pub fn from_json(str: AsciiPointer, mode: Mode, deny_unknown_fields: bool) -> Result<Self, Error> {
[INFO] [stdout] 50 | |         let s = str.as_str()?;
[INFO] [stdout] 51 | |         let mut d = serde_json::Deserializer::from_str(s);
[INFO] [stdout] ...  |
[INFO] [stdout] 56 | |         })
[INFO] [stdout] 57 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 48 ~     unsafe(#[ffi_service_ctor]
[INFO] [stdout] 49 |     pub fn from_json(str: AsciiPointer, mode: Mode, deny_unknown_fields: bool) -> Result<Self, Error> {
[INFO] [stdout] ...
[INFO] [stdout] 56 |         })
[INFO] [stdout] 57 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:59:5
[INFO] [stdout]    |
[INFO] [stdout] 59 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 60 | |     pub fn remove_unknown_mods(&mut self) {
[INFO] [stdout] 61 | |         self.mods = self.mods.clone().into_iter().filter(|m| m.kind() != UnknownMod::kind()).collect();
[INFO] [stdout] 62 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 59 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 60 |     pub fn remove_unknown_mods(&mut self) {
[INFO] [stdout] 61 |         self.mods = self.mods.clone().into_iter().filter(|m| m.kind() != UnknownMod::kind()).collect();
[INFO] [stdout] 62 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:65:5
[INFO] [stdout]    |
[INFO] [stdout] 65 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 | |     pub fn sanitize(&mut self) {
[INFO] [stdout] 67 | |         self.mods.sanitize();
[INFO] [stdout] 68 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 65 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 66 |     pub fn sanitize(&mut self) {
[INFO] [stdout] 67 |         self.mods.sanitize();
[INFO] [stdout] 68 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:70:5
[INFO] [stdout]    |
[INFO] [stdout] 70 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 71 | |     pub fn bits(&mut self) -> u32 {
[INFO] [stdout] 72 | |         self.mods.bits()
[INFO] [stdout] 73 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 70 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 71 |     pub fn bits(&mut self) -> u32 {
[INFO] [stdout] 72 |         self.mods.bits()
[INFO] [stdout] 73 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:75:5
[INFO] [stdout]    |
[INFO] [stdout] 75 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 76 | |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 77 | |         self.mods.len() as u32
[INFO] [stdout] 78 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 75 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 76 |     pub fn len(&mut self) -> u32 {
[INFO] [stdout] 77 |         self.mods.len() as u32
[INFO] [stdout] 78 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:80:5
[INFO] [stdout]    |
[INFO] [stdout] 80 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 81 | |     pub fn json(&mut self, str: &mut OwnedString) {
[INFO] [stdout] 82 | |         str.replace(serde_json::to_string_pretty(&self.mods).unwrap())
[INFO] [stdout] 83 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 80 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 81 |     pub fn json(&mut self, str: &mut OwnedString) {
[INFO] [stdout] 82 |         str.replace(serde_json::to_string_pretty(&self.mods).unwrap())
[INFO] [stdout] 83 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]   --> rosu_pp_ffi/src/mods.rs:85:5
[INFO] [stdout]    |
[INFO] [stdout] 85 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 | |     pub fn insert_json(&mut self, str: AsciiPointer, deny_unknown_fields: bool) -> bool {
[INFO] [stdout] 87 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 88 | |             let mut d = serde_json::Deserializer::from_str(s);
[INFO] [stdout] ...  |
[INFO] [stdout] 95 | |         false
[INFO] [stdout] 96 | |     }
[INFO] [stdout]    | |_____^ usage of unsafe attribute
[INFO] [stdout]    |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]    |
[INFO] [stdout] 85 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 86 |     pub fn insert_json(&mut self, str: AsciiPointer, deny_unknown_fields: bool) -> bool {
[INFO] [stdout] ...
[INFO] [stdout] 95 |         false
[INFO] [stdout] 96 ~     })
[INFO] [stdout]    |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:98:5
[INFO] [stdout]     |
[INFO] [stdout]  98 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 | |     pub fn insert(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] 100 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 101 | |             self.mods.insert(GameMod::new(s, self.mode.unwrap_or_default().into()));
[INFO] [stdout] ...   |
[INFO] [stdout] 104 | |         false
[INFO] [stdout] 105 | |     }
[INFO] [stdout]     | |_____^ usage of unsafe attribute
[INFO] [stdout]     |
[INFO] [stdout] help: wrap the attribute in `unsafe(...)`
[INFO] [stdout]     |
[INFO] [stdout]  98 ~     unsafe(#[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout]  99 |     pub fn insert(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] ...
[INFO] [stdout] 104 |         false
[INFO] [stdout] 105 ~     })
[INFO] [stdout]     |
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] error: unsafe attribute used without unsafe
[INFO] [stdout]    --> rosu_pp_ffi/src/mods.rs:107:5
[INFO] [stdout]     |
[INFO] [stdout] 107 | /     #[ffi_service_method(on_panic = "undefined_behavior")]
[INFO] [stdout] 108 | |     pub fn contains(&mut self, str: AsciiPointer) -> bool {
[INFO] [stdout] 109 | |         if let Ok(s) = str.as_str() {
[INFO] [stdout] 110 | |             if let Ok(m) = s.parse::<Acronym>(){
[WARN] too many lines in the log, truncating it
